UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

131 lines (116 loc) 3.14 kB
import _defineProperty from 'babel-runtime/helpers/defineProperty'; import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray'; import _extends from 'babel-runtime/helpers/extends'; import PropTypes from '../_util/vue-types'; import classNames from 'classnames'; import { getOptionProps } from '../_util/props-util'; import { ConfigConsumerProps } from '../config-provider'; export var BasicProps = { prefixCls: PropTypes.string, hasSider: PropTypes.boolean }; function generator(props, name) { return function (BasicComponent) { return { name: name, props: BasicComponent.props, inject: { configProvider: { 'default': function _default() { return ConfigConsumerProps; } } }, render: function render() { var h = arguments[0]; var suffixCls = props.suffixCls; var customizePrefixCls = this.$props.prefixCls; var getPrefixCls = this.configProvider.getPrefixCls; var prefixCls = getPrefixCls(suffixCls, customizePrefixCls); var basicComponentProps = { props: _extends({ prefixCls: prefixCls }, getOptionProps(this)), on: this.$listeners }; return h( BasicComponent, basicComponentProps, [this.$slots['default']] ); } }; }; } var Basic = { props: BasicProps, render: function render() { var h = arguments[0]; var prefixCls = this.prefixCls, $slots = this.$slots, $listeners = this.$listeners; var divProps = { 'class': prefixCls, on: $listeners }; return h( 'div', divProps, [$slots['default']] ); } }; var BasicLayout = { props: BasicProps, data: function data() { return { siders: [] }; }, provide: function provide() { var _this = this; return { siderHook: { addSider: function addSider(id) { _this.siders = [].concat(_toConsumableArray(_this.siders), [id]); }, removeSider: function removeSider(id) { _this.siders = _this.siders.filter(function (currentId) { return currentId !== id; }); } } }; }, render: function render() { var h = arguments[0]; var prefixCls = this.prefixCls, $slots = this.$slots, hasSider = this.hasSider, $listeners = this.$listeners; var divCls = classNames(prefixCls, _defineProperty({}, prefixCls + '-has-sider', hasSider || this.siders.length > 0)); var divProps = { 'class': divCls, on: $listeners }; return h( 'div', divProps, [$slots['default']] ); } }; var Layout = generator({ suffixCls: 'layout' }, 'ALayout')(BasicLayout); var Header = generator({ suffixCls: 'layout-header' }, 'ALayoutHeader')(Basic); var Footer = generator({ suffixCls: 'layout-footer' }, 'ALayoutFooter')(Basic); var Content = generator({ suffixCls: 'layout-content' }, 'ALayoutContent')(Basic); Layout.Header = Header; Layout.Footer = Footer; Layout.Content = Content; export default Layout;