Card.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = exports.cardProps = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _tabs = _interopRequireDefault(require("../tabs"));
  10. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  11. var _propsUtil = require("../_util/props-util");
  12. var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
  13. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  14. var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
  15. var _style = _interopRequireDefault(require("./style"));
  16. var _skeleton = _interopRequireDefault(require("../skeleton"));
  17. var _vnode = require("../_util/vnode");
  18. const {
  19. TabPane
  20. } = _tabs.default;
  21. const cardProps = () => ({
  22. prefixCls: String,
  23. title: _vueTypes.default.any,
  24. extra: _vueTypes.default.any,
  25. bordered: {
  26. type: Boolean,
  27. default: true
  28. },
  29. bodyStyle: {
  30. type: Object,
  31. default: undefined
  32. },
  33. headStyle: {
  34. type: Object,
  35. default: undefined
  36. },
  37. loading: {
  38. type: Boolean,
  39. default: false
  40. },
  41. hoverable: {
  42. type: Boolean,
  43. default: false
  44. },
  45. type: {
  46. type: String
  47. },
  48. size: {
  49. type: String
  50. },
  51. actions: _vueTypes.default.any,
  52. tabList: {
  53. type: Array
  54. },
  55. tabBarExtraContent: _vueTypes.default.any,
  56. activeTabKey: String,
  57. defaultActiveTabKey: String,
  58. cover: _vueTypes.default.any,
  59. onTabChange: {
  60. type: Function
  61. }
  62. });
  63. exports.cardProps = cardProps;
  64. const Card = (0, _vue.defineComponent)({
  65. compatConfig: {
  66. MODE: 3
  67. },
  68. name: 'ACard',
  69. inheritAttrs: false,
  70. props: cardProps(),
  71. slots: Object,
  72. setup(props, _ref) {
  73. let {
  74. slots,
  75. attrs
  76. } = _ref;
  77. const {
  78. prefixCls,
  79. direction,
  80. size
  81. } = (0, _useConfigInject.default)('card', props);
  82. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  83. const getAction = actions => {
  84. const actionList = actions.map((action, index) => (0, _vue.isVNode)(action) && !(0, _propsUtil.isEmptyElement)(action) || !(0, _vue.isVNode)(action) ? (0, _vue.createVNode)("li", {
  85. "style": {
  86. width: `${100 / actions.length}%`
  87. },
  88. "key": `action-${index}`
  89. }, [(0, _vue.createVNode)("span", null, [action])]) : null);
  90. return actionList;
  91. };
  92. const triggerTabChange = key => {
  93. var _a;
  94. (_a = props.onTabChange) === null || _a === void 0 ? void 0 : _a.call(props, key);
  95. };
  96. const isContainGrid = function () {
  97. let obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  98. let containGrid;
  99. obj.forEach(element => {
  100. if (element && (0, _isPlainObject.default)(element.type) && element.type.__ANT_CARD_GRID) {
  101. containGrid = true;
  102. }
  103. });
  104. return containGrid;
  105. };
  106. return () => {
  107. var _a, _b, _c, _d, _e, _f;
  108. const {
  109. headStyle = {},
  110. bodyStyle = {},
  111. loading,
  112. bordered = true,
  113. type,
  114. tabList,
  115. hoverable,
  116. activeTabKey,
  117. defaultActiveTabKey,
  118. tabBarExtraContent = (0, _propsUtil.filterEmptyWithUndefined)((_a = slots.tabBarExtraContent) === null || _a === void 0 ? void 0 : _a.call(slots)),
  119. title = (0, _propsUtil.filterEmptyWithUndefined)((_b = slots.title) === null || _b === void 0 ? void 0 : _b.call(slots)),
  120. extra = (0, _propsUtil.filterEmptyWithUndefined)((_c = slots.extra) === null || _c === void 0 ? void 0 : _c.call(slots)),
  121. actions = (0, _propsUtil.filterEmptyWithUndefined)((_d = slots.actions) === null || _d === void 0 ? void 0 : _d.call(slots)),
  122. cover = (0, _propsUtil.filterEmptyWithUndefined)((_e = slots.cover) === null || _e === void 0 ? void 0 : _e.call(slots))
  123. } = props;
  124. const children = (0, _propsUtil.flattenChildren)((_f = slots.default) === null || _f === void 0 ? void 0 : _f.call(slots));
  125. const pre = prefixCls.value;
  126. const classString = {
  127. [`${pre}`]: true,
  128. [hashId.value]: true,
  129. [`${pre}-loading`]: loading,
  130. [`${pre}-bordered`]: bordered,
  131. [`${pre}-hoverable`]: !!hoverable,
  132. [`${pre}-contain-grid`]: isContainGrid(children),
  133. [`${pre}-contain-tabs`]: tabList && tabList.length,
  134. [`${pre}-${size.value}`]: size.value,
  135. [`${pre}-type-${type}`]: !!type,
  136. [`${pre}-rtl`]: direction.value === 'rtl'
  137. };
  138. const loadingBlock = (0, _vue.createVNode)(_skeleton.default, {
  139. "loading": true,
  140. "active": true,
  141. "paragraph": {
  142. rows: 4
  143. },
  144. "title": false
  145. }, {
  146. default: () => [children]
  147. });
  148. const hasActiveTabKey = activeTabKey !== undefined;
  149. const tabsProps = {
  150. size: 'large',
  151. [hasActiveTabKey ? 'activeKey' : 'defaultActiveKey']: hasActiveTabKey ? activeTabKey : defaultActiveTabKey,
  152. onChange: triggerTabChange,
  153. class: `${pre}-head-tabs`
  154. };
  155. let head;
  156. const tabs = tabList && tabList.length ? (0, _vue.createVNode)(_tabs.default, tabsProps, {
  157. default: () => [tabList.map(item => {
  158. const {
  159. tab: temp,
  160. slots: itemSlots
  161. } = item;
  162. const name = itemSlots === null || itemSlots === void 0 ? void 0 : itemSlots.tab;
  163. (0, _devWarning.default)(!itemSlots, 'Card', `tabList slots is deprecated, Please use \`customTab\` instead.`);
  164. let tab = temp !== undefined ? temp : slots[name] ? slots[name](item) : null;
  165. tab = (0, _vnode.customRenderSlot)(slots, 'customTab', item, () => [tab]);
  166. return (0, _vue.createVNode)(TabPane, {
  167. "tab": tab,
  168. "key": item.key,
  169. "disabled": item.disabled
  170. }, null);
  171. })],
  172. rightExtra: tabBarExtraContent ? () => tabBarExtraContent : null
  173. }) : null;
  174. if (title || extra || tabs) {
  175. head = (0, _vue.createVNode)("div", {
  176. "class": `${pre}-head`,
  177. "style": headStyle
  178. }, [(0, _vue.createVNode)("div", {
  179. "class": `${pre}-head-wrapper`
  180. }, [title && (0, _vue.createVNode)("div", {
  181. "class": `${pre}-head-title`
  182. }, [title]), extra && (0, _vue.createVNode)("div", {
  183. "class": `${pre}-extra`
  184. }, [extra])]), tabs]);
  185. }
  186. const coverDom = cover ? (0, _vue.createVNode)("div", {
  187. "class": `${pre}-cover`
  188. }, [cover]) : null;
  189. const body = (0, _vue.createVNode)("div", {
  190. "class": `${pre}-body`,
  191. "style": bodyStyle
  192. }, [loading ? loadingBlock : children]);
  193. const actionDom = actions && actions.length ? (0, _vue.createVNode)("ul", {
  194. "class": `${pre}-actions`
  195. }, [getAction(actions)]) : null;
  196. return wrapSSR((0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({
  197. "ref": "cardContainerRef"
  198. }, attrs), {}, {
  199. "class": [classString, attrs.class]
  200. }), [head, coverDom, children && children.length ? body : null, actionDom]));
  201. };
  202. }
  203. });
  204. var _default = exports.default = Card;