layout.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
  2. import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
  3. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  4. import { createVNode as _createVNode, resolveDirective as _resolveDirective } from "vue";
  5. import { computed, createVNode, defineComponent, provide, ref } from 'vue';
  6. import useConfigInject from '../_util/hooks/useConfigInject';
  7. import { SiderHookProviderKey } from './injectionKey';
  8. export var basicProps = function basicProps() {
  9. return {
  10. prefixCls: String,
  11. hasSider: {
  12. type: Boolean,
  13. default: undefined
  14. },
  15. tagName: String
  16. };
  17. };
  18. function generator(_ref) {
  19. var suffixCls = _ref.suffixCls,
  20. tagName = _ref.tagName,
  21. name = _ref.name;
  22. return function (BasicComponent) {
  23. var Adapter = defineComponent({
  24. compatConfig: {
  25. MODE: 3
  26. },
  27. name: name,
  28. props: basicProps(),
  29. setup: function setup(props, _ref2) {
  30. var slots = _ref2.slots;
  31. var _useConfigInject = useConfigInject(suffixCls, props),
  32. prefixCls = _useConfigInject.prefixCls;
  33. return function () {
  34. var basicComponentProps = _objectSpread(_objectSpread({}, props), {}, {
  35. prefixCls: prefixCls.value,
  36. tagName: tagName
  37. });
  38. return _createVNode(BasicComponent, basicComponentProps, slots);
  39. };
  40. }
  41. });
  42. return Adapter;
  43. };
  44. }
  45. var Basic = defineComponent({
  46. compatConfig: {
  47. MODE: 3
  48. },
  49. props: basicProps(),
  50. setup: function setup(props, _ref3) {
  51. var slots = _ref3.slots;
  52. return function () {
  53. return createVNode(props.tagName, {
  54. class: props.prefixCls
  55. }, slots);
  56. };
  57. }
  58. });
  59. var BasicLayout = defineComponent({
  60. compatConfig: {
  61. MODE: 3
  62. },
  63. props: basicProps(),
  64. setup: function setup(props, _ref4) {
  65. var slots = _ref4.slots;
  66. var _useConfigInject2 = useConfigInject('', props),
  67. direction = _useConfigInject2.direction;
  68. var siders = ref([]);
  69. var siderHookProvider = {
  70. addSider: function addSider(id) {
  71. siders.value = [].concat(_toConsumableArray(siders.value), [id]);
  72. },
  73. removeSider: function removeSider(id) {
  74. siders.value = siders.value.filter(function (currentId) {
  75. return currentId !== id;
  76. });
  77. }
  78. };
  79. provide(SiderHookProviderKey, siderHookProvider);
  80. var divCls = computed(function () {
  81. var _ref5;
  82. var prefixCls = props.prefixCls,
  83. hasSider = props.hasSider;
  84. return _ref5 = {}, _defineProperty(_ref5, "".concat(prefixCls), true), _defineProperty(_ref5, "".concat(prefixCls, "-has-sider"), typeof hasSider === 'boolean' ? hasSider : siders.value.length > 0), _defineProperty(_ref5, "".concat(prefixCls, "-rtl"), direction.value === 'rtl'), _ref5;
  85. });
  86. return function () {
  87. var tagName = props.tagName;
  88. return createVNode(tagName, {
  89. class: divCls.value
  90. }, slots);
  91. };
  92. }
  93. });
  94. var Layout = generator({
  95. suffixCls: 'layout',
  96. tagName: 'section',
  97. name: 'ALayout'
  98. })(BasicLayout);
  99. var Header = generator({
  100. suffixCls: 'layout-header',
  101. tagName: 'header',
  102. name: 'ALayoutHeader'
  103. })(Basic);
  104. var Footer = generator({
  105. suffixCls: 'layout-footer',
  106. tagName: 'footer',
  107. name: 'ALayoutFooter'
  108. })(Basic);
  109. var Content = generator({
  110. suffixCls: 'layout-content',
  111. tagName: 'main',
  112. name: 'ALayoutContent'
  113. })(Basic);
  114. export { Header, Footer, Content };
  115. export default Layout;