Skeleton.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.skeletonProps = exports.default = void 0;
  7. var _vue = require("vue");
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  10. var _propsUtil = require("../_util/props-util");
  11. var _Title = _interopRequireDefault(require("./Title"));
  12. var _Paragraph = _interopRequireDefault(require("./Paragraph"));
  13. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  14. var _Element = _interopRequireDefault(require("./Element"));
  15. var _style = _interopRequireDefault(require("./style"));
  16. const skeletonProps = () => ({
  17. active: {
  18. type: Boolean,
  19. default: undefined
  20. },
  21. loading: {
  22. type: Boolean,
  23. default: undefined
  24. },
  25. prefixCls: String,
  26. avatar: {
  27. type: [Boolean, Object],
  28. default: undefined
  29. },
  30. title: {
  31. type: [Boolean, Object],
  32. default: undefined
  33. },
  34. paragraph: {
  35. type: [Boolean, Object],
  36. default: undefined
  37. },
  38. round: {
  39. type: Boolean,
  40. default: undefined
  41. }
  42. });
  43. exports.skeletonProps = skeletonProps;
  44. function getComponentProps(prop) {
  45. if (prop && typeof prop === 'object') {
  46. return prop;
  47. }
  48. return {};
  49. }
  50. function getAvatarBasicProps(hasTitle, hasParagraph) {
  51. if (hasTitle && !hasParagraph) {
  52. // Square avatar
  53. return {
  54. size: 'large',
  55. shape: 'square'
  56. };
  57. }
  58. return {
  59. size: 'large',
  60. shape: 'circle'
  61. };
  62. }
  63. function getTitleBasicProps(hasAvatar, hasParagraph) {
  64. if (!hasAvatar && hasParagraph) {
  65. return {
  66. width: '38%'
  67. };
  68. }
  69. if (hasAvatar && hasParagraph) {
  70. return {
  71. width: '50%'
  72. };
  73. }
  74. return {};
  75. }
  76. function getParagraphBasicProps(hasAvatar, hasTitle) {
  77. const basicProps = {};
  78. // Width
  79. if (!hasAvatar || !hasTitle) {
  80. basicProps.width = '61%';
  81. }
  82. // Rows
  83. if (!hasAvatar && hasTitle) {
  84. basicProps.rows = 3;
  85. } else {
  86. basicProps.rows = 2;
  87. }
  88. return basicProps;
  89. }
  90. const Skeleton = (0, _vue.defineComponent)({
  91. compatConfig: {
  92. MODE: 3
  93. },
  94. name: 'ASkeleton',
  95. props: (0, _propsUtil.initDefaultProps)(skeletonProps(), {
  96. avatar: false,
  97. title: true,
  98. paragraph: true
  99. }),
  100. setup(props, _ref) {
  101. let {
  102. slots
  103. } = _ref;
  104. const {
  105. prefixCls,
  106. direction
  107. } = (0, _useConfigInject.default)('skeleton', props);
  108. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  109. return () => {
  110. var _a;
  111. const {
  112. loading,
  113. avatar,
  114. title,
  115. paragraph,
  116. active,
  117. round
  118. } = props;
  119. const pre = prefixCls.value;
  120. if (loading || props.loading === undefined) {
  121. const hasAvatar = !!avatar || avatar === '';
  122. const hasTitle = !!title || title === '';
  123. const hasParagraph = !!paragraph || paragraph === '';
  124. // Avatar
  125. let avatarNode;
  126. if (hasAvatar) {
  127. const avatarProps = (0, _extends2.default)((0, _extends2.default)({
  128. prefixCls: `${pre}-avatar`
  129. }, getAvatarBasicProps(hasTitle, hasParagraph)), getComponentProps(avatar));
  130. avatarNode = (0, _vue.createVNode)("div", {
  131. "class": `${pre}-header`
  132. }, [(0, _vue.createVNode)(_Element.default, avatarProps, null)]);
  133. }
  134. let contentNode;
  135. if (hasTitle || hasParagraph) {
  136. // Title
  137. let $title;
  138. if (hasTitle) {
  139. const titleProps = (0, _extends2.default)((0, _extends2.default)({
  140. prefixCls: `${pre}-title`
  141. }, getTitleBasicProps(hasAvatar, hasParagraph)), getComponentProps(title));
  142. $title = (0, _vue.createVNode)(_Title.default, titleProps, null);
  143. }
  144. // Paragraph
  145. let paragraphNode;
  146. if (hasParagraph) {
  147. const paragraphProps = (0, _extends2.default)((0, _extends2.default)({
  148. prefixCls: `${pre}-paragraph`
  149. }, getParagraphBasicProps(hasAvatar, hasTitle)), getComponentProps(paragraph));
  150. paragraphNode = (0, _vue.createVNode)(_Paragraph.default, paragraphProps, null);
  151. }
  152. contentNode = (0, _vue.createVNode)("div", {
  153. "class": `${pre}-content`
  154. }, [$title, paragraphNode]);
  155. }
  156. const cls = (0, _classNames.default)(pre, {
  157. [`${pre}-with-avatar`]: hasAvatar,
  158. [`${pre}-active`]: active,
  159. [`${pre}-rtl`]: direction.value === 'rtl',
  160. [`${pre}-round`]: round,
  161. [hashId.value]: true
  162. });
  163. return wrapSSR((0, _vue.createVNode)("div", {
  164. "class": cls
  165. }, [avatarNode, contentNode]));
  166. }
  167. return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
  168. };
  169. }
  170. });
  171. var _default = exports.default = Skeleton;