index.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. Object.defineProperty(exports, "ListItem", {
  7. enumerable: true,
  8. get: function () {
  9. return _Item.default;
  10. }
  11. });
  12. Object.defineProperty(exports, "ListItemMeta", {
  13. enumerable: true,
  14. get: function () {
  15. return _ItemMeta.default;
  16. }
  17. });
  18. exports.listProps = exports.default = void 0;
  19. var _vue = require("vue");
  20. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  21. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  22. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  23. var _spin = _interopRequireDefault(require("../spin"));
  24. var _pagination = _interopRequireDefault(require("../pagination"));
  25. var _grid = require("../grid");
  26. var _Item = _interopRequireDefault(require("./Item"));
  27. var _propsUtil = require("../_util/props-util");
  28. var _initDefaultProps = _interopRequireDefault(require("../_util/props-util/initDefaultProps"));
  29. var _type = require("../_util/type");
  30. var _ItemMeta = _interopRequireDefault(require("./ItemMeta"));
  31. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  32. var _useBreakpoint = _interopRequireDefault(require("../_util/hooks/useBreakpoint"));
  33. var _responsiveObserve = require("../_util/responsiveObserve");
  34. var _eagerComputed = _interopRequireDefault(require("../_util/eagerComputed"));
  35. var _style = _interopRequireDefault(require("./style"));
  36. var _contextKey = require("./contextKey");
  37. // CSSINJS
  38. const listProps = () => ({
  39. bordered: (0, _type.booleanType)(),
  40. dataSource: (0, _type.arrayType)(),
  41. extra: (0, _type.vNodeType)(),
  42. grid: (0, _type.objectType)(),
  43. itemLayout: String,
  44. loading: (0, _type.someType)([Boolean, Object]),
  45. loadMore: (0, _type.vNodeType)(),
  46. pagination: (0, _type.someType)([Boolean, Object]),
  47. prefixCls: String,
  48. rowKey: (0, _type.someType)([String, Number, Function]),
  49. renderItem: (0, _type.functionType)(),
  50. size: String,
  51. split: (0, _type.booleanType)(),
  52. header: (0, _type.vNodeType)(),
  53. footer: (0, _type.vNodeType)(),
  54. locale: (0, _type.objectType)()
  55. });
  56. exports.listProps = listProps;
  57. const List = (0, _vue.defineComponent)({
  58. compatConfig: {
  59. MODE: 3
  60. },
  61. name: 'AList',
  62. inheritAttrs: false,
  63. Item: _Item.default,
  64. props: (0, _initDefaultProps.default)(listProps(), {
  65. dataSource: [],
  66. bordered: false,
  67. split: true,
  68. loading: false,
  69. pagination: false
  70. }),
  71. slots: Object,
  72. setup(props, _ref) {
  73. let {
  74. slots,
  75. attrs
  76. } = _ref;
  77. var _a, _b;
  78. (0, _vue.provide)(_contextKey.ListContextKey, {
  79. grid: (0, _vue.toRef)(props, 'grid'),
  80. itemLayout: (0, _vue.toRef)(props, 'itemLayout')
  81. });
  82. const defaultPaginationProps = {
  83. current: 1,
  84. total: 0
  85. };
  86. const {
  87. prefixCls,
  88. direction,
  89. renderEmpty
  90. } = (0, _useConfigInject.default)('list', props);
  91. // Style
  92. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  93. const paginationObj = (0, _vue.computed)(() => props.pagination && typeof props.pagination === 'object' ? props.pagination : {});
  94. const paginationCurrent = (0, _vue.ref)((_a = paginationObj.value.defaultCurrent) !== null && _a !== void 0 ? _a : 1);
  95. const paginationSize = (0, _vue.ref)((_b = paginationObj.value.defaultPageSize) !== null && _b !== void 0 ? _b : 10);
  96. (0, _vue.watch)(paginationObj, () => {
  97. if ('current' in paginationObj.value) {
  98. paginationCurrent.value = paginationObj.value.current;
  99. }
  100. if ('pageSize' in paginationObj.value) {
  101. paginationSize.value = paginationObj.value.pageSize;
  102. }
  103. });
  104. const listItemsKeys = [];
  105. const triggerPaginationEvent = eventName => (page, pageSize) => {
  106. paginationCurrent.value = page;
  107. paginationSize.value = pageSize;
  108. if (paginationObj.value[eventName]) {
  109. paginationObj.value[eventName](page, pageSize);
  110. }
  111. };
  112. const onPaginationChange = triggerPaginationEvent('onChange');
  113. const onPaginationShowSizeChange = triggerPaginationEvent('onShowSizeChange');
  114. const loadingProp = (0, _vue.computed)(() => {
  115. if (typeof props.loading === 'boolean') {
  116. return {
  117. spinning: props.loading
  118. };
  119. } else {
  120. return props.loading;
  121. }
  122. });
  123. const isLoading = (0, _vue.computed)(() => loadingProp.value && loadingProp.value.spinning);
  124. const sizeCls = (0, _vue.computed)(() => {
  125. let size = '';
  126. switch (props.size) {
  127. case 'large':
  128. size = 'lg';
  129. break;
  130. case 'small':
  131. size = 'sm';
  132. break;
  133. default:
  134. break;
  135. }
  136. return size;
  137. });
  138. const classObj = (0, _vue.computed)(() => ({
  139. [`${prefixCls.value}`]: true,
  140. [`${prefixCls.value}-vertical`]: props.itemLayout === 'vertical',
  141. [`${prefixCls.value}-${sizeCls.value}`]: sizeCls.value,
  142. [`${prefixCls.value}-split`]: props.split,
  143. [`${prefixCls.value}-bordered`]: props.bordered,
  144. [`${prefixCls.value}-loading`]: isLoading.value,
  145. [`${prefixCls.value}-grid`]: !!props.grid,
  146. [`${prefixCls.value}-rtl`]: direction.value === 'rtl'
  147. }));
  148. const paginationProps = (0, _vue.computed)(() => {
  149. const pp = (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({}, defaultPaginationProps), {
  150. total: props.dataSource.length,
  151. current: paginationCurrent.value,
  152. pageSize: paginationSize.value
  153. }), props.pagination || {});
  154. const largestPage = Math.ceil(pp.total / pp.pageSize);
  155. if (pp.current > largestPage) {
  156. pp.current = largestPage;
  157. }
  158. return pp;
  159. });
  160. const splitDataSource = (0, _vue.computed)(() => {
  161. let dd = [...props.dataSource];
  162. if (props.pagination) {
  163. if (props.dataSource.length > (paginationProps.value.current - 1) * paginationProps.value.pageSize) {
  164. dd = [...props.dataSource].splice((paginationProps.value.current - 1) * paginationProps.value.pageSize, paginationProps.value.pageSize);
  165. }
  166. }
  167. return dd;
  168. });
  169. const screens = (0, _useBreakpoint.default)();
  170. const currentBreakpoint = (0, _eagerComputed.default)(() => {
  171. for (let i = 0; i < _responsiveObserve.responsiveArray.length; i += 1) {
  172. const breakpoint = _responsiveObserve.responsiveArray[i];
  173. if (screens.value[breakpoint]) {
  174. return breakpoint;
  175. }
  176. }
  177. return undefined;
  178. });
  179. const colStyle = (0, _vue.computed)(() => {
  180. if (!props.grid) {
  181. return undefined;
  182. }
  183. const columnCount = currentBreakpoint.value && props.grid[currentBreakpoint.value] ? props.grid[currentBreakpoint.value] : props.grid.column;
  184. if (columnCount) {
  185. return {
  186. width: `${100 / columnCount}%`,
  187. maxWidth: `${100 / columnCount}%`
  188. };
  189. }
  190. return undefined;
  191. });
  192. const renderInnerItem = (item, index) => {
  193. var _a;
  194. const renderItem = (_a = props.renderItem) !== null && _a !== void 0 ? _a : slots.renderItem;
  195. if (!renderItem) return null;
  196. let key;
  197. const rowKeyType = typeof props.rowKey;
  198. if (rowKeyType === 'function') {
  199. key = props.rowKey(item);
  200. } else if (rowKeyType === 'string' || rowKeyType === 'number') {
  201. key = item[props.rowKey];
  202. } else {
  203. key = item.key;
  204. }
  205. if (!key) {
  206. key = `list-item-${index}`;
  207. }
  208. listItemsKeys[index] = key;
  209. return renderItem({
  210. item,
  211. index
  212. });
  213. };
  214. return () => {
  215. var _a, _b, _c, _d, _e, _f, _g, _h;
  216. const loadMore = (_a = props.loadMore) !== null && _a !== void 0 ? _a : (_b = slots.loadMore) === null || _b === void 0 ? void 0 : _b.call(slots);
  217. const footer = (_c = props.footer) !== null && _c !== void 0 ? _c : (_d = slots.footer) === null || _d === void 0 ? void 0 : _d.call(slots);
  218. const header = (_e = props.header) !== null && _e !== void 0 ? _e : (_f = slots.header) === null || _f === void 0 ? void 0 : _f.call(slots);
  219. const children = (0, _propsUtil.flattenChildren)((_g = slots.default) === null || _g === void 0 ? void 0 : _g.call(slots));
  220. const isSomethingAfterLastItem = !!(loadMore || props.pagination || footer);
  221. const classString = (0, _classNames.default)((0, _extends2.default)((0, _extends2.default)({}, classObj.value), {
  222. [`${prefixCls.value}-something-after-last-item`]: isSomethingAfterLastItem
  223. }), attrs.class, hashId.value);
  224. const paginationContent = props.pagination ? (0, _vue.createVNode)("div", {
  225. "class": `${prefixCls.value}-pagination`
  226. }, [(0, _vue.createVNode)(_pagination.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, paginationProps.value), {}, {
  227. "onChange": onPaginationChange,
  228. "onShowSizeChange": onPaginationShowSizeChange
  229. }), null)]) : null;
  230. let childrenContent = isLoading.value && (0, _vue.createVNode)("div", {
  231. "style": {
  232. minHeight: '53px'
  233. }
  234. }, null);
  235. if (splitDataSource.value.length > 0) {
  236. listItemsKeys.length = 0;
  237. const items = splitDataSource.value.map((item, index) => renderInnerItem(item, index));
  238. const childrenList = items.map((child, index) => (0, _vue.createVNode)("div", {
  239. "key": listItemsKeys[index],
  240. "style": colStyle.value
  241. }, [child]));
  242. childrenContent = props.grid ? (0, _vue.createVNode)(_grid.Row, {
  243. "gutter": props.grid.gutter
  244. }, {
  245. default: () => [childrenList]
  246. }) : (0, _vue.createVNode)("ul", {
  247. "class": `${prefixCls.value}-items`
  248. }, [items]);
  249. } else if (!children.length && !isLoading.value) {
  250. childrenContent = (0, _vue.createVNode)("div", {
  251. "class": `${prefixCls.value}-empty-text`
  252. }, [((_h = props.locale) === null || _h === void 0 ? void 0 : _h.emptyText) || renderEmpty('List')]);
  253. }
  254. const paginationPosition = paginationProps.value.position || 'bottom';
  255. return wrapSSR((0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  256. "class": classString
  257. }), [(paginationPosition === 'top' || paginationPosition === 'both') && paginationContent, header && (0, _vue.createVNode)("div", {
  258. "class": `${prefixCls.value}-header`
  259. }, [header]), (0, _vue.createVNode)(_spin.default, loadingProp.value, {
  260. default: () => [childrenContent, children]
  261. }), footer && (0, _vue.createVNode)("div", {
  262. "class": `${prefixCls.value}-footer`
  263. }, [footer]), loadMore || (paginationPosition === 'bottom' || paginationPosition === 'both') && paginationContent]));
  264. };
  265. }
  266. });
  267. /* istanbul ignore next */
  268. List.install = function (app) {
  269. app.component(List.name, List);
  270. app.component(List.Item.name, List.Item);
  271. app.component(List.Item.Meta.name, List.Item.Meta);
  272. return app;
  273. };
  274. var _default = exports.default = List;