项目原始demo,不改动
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

VData.js 14 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _helpers = require("../../util/helpers");
  7. var _vue = _interopRequireDefault(require("vue"));
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
  10. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
  11. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  12. function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
  13. function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
  14. function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
  15. function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
  16. var _default2 = _vue.default.extend({
  17. name: 'v-data',
  18. inheritAttrs: false,
  19. props: {
  20. items: {
  21. type: Array,
  22. default: function _default() {
  23. return [];
  24. }
  25. },
  26. options: {
  27. type: Object,
  28. default: function _default() {
  29. return {};
  30. }
  31. },
  32. sortBy: {
  33. type: [String, Array],
  34. default: function _default() {
  35. return [];
  36. }
  37. },
  38. sortDesc: {
  39. type: [Boolean, Array],
  40. default: function _default() {
  41. return [];
  42. }
  43. },
  44. customSort: {
  45. type: Function,
  46. default: _helpers.sortItems
  47. },
  48. mustSort: Boolean,
  49. multiSort: Boolean,
  50. page: {
  51. type: Number,
  52. default: 1
  53. },
  54. itemsPerPage: {
  55. type: Number,
  56. default: 10
  57. },
  58. groupBy: {
  59. type: [String, Array],
  60. default: function _default() {
  61. return [];
  62. }
  63. },
  64. groupDesc: {
  65. type: [Boolean, Array],
  66. default: function _default() {
  67. return [];
  68. }
  69. },
  70. customGroup: {
  71. type: Function,
  72. default: _helpers.groupItems
  73. },
  74. locale: {
  75. type: String,
  76. default: 'en-US'
  77. },
  78. disableSort: Boolean,
  79. disablePagination: Boolean,
  80. disableFiltering: Boolean,
  81. search: String,
  82. customFilter: {
  83. type: Function,
  84. default: _helpers.searchItems
  85. },
  86. serverItemsLength: {
  87. type: Number,
  88. default: -1
  89. }
  90. },
  91. data: function data() {
  92. var internalOptions = {
  93. page: this.page,
  94. itemsPerPage: this.itemsPerPage,
  95. sortBy: (0, _helpers.wrapInArray)(this.sortBy),
  96. sortDesc: (0, _helpers.wrapInArray)(this.sortDesc),
  97. groupBy: (0, _helpers.wrapInArray)(this.groupBy),
  98. groupDesc: (0, _helpers.wrapInArray)(this.groupDesc),
  99. mustSort: this.mustSort,
  100. multiSort: this.multiSort
  101. };
  102. if (this.options) {
  103. internalOptions = Object.assign(internalOptions, this.options);
  104. }
  105. var _internalOptions = internalOptions,
  106. sortBy = _internalOptions.sortBy,
  107. sortDesc = _internalOptions.sortDesc,
  108. groupBy = _internalOptions.groupBy,
  109. groupDesc = _internalOptions.groupDesc;
  110. var sortDiff = sortBy.length - sortDesc.length;
  111. var groupDiff = groupBy.length - groupDesc.length;
  112. if (sortDiff > 0) {
  113. var _internalOptions$sort;
  114. (_internalOptions$sort = internalOptions.sortDesc).push.apply(_internalOptions$sort, _toConsumableArray((0, _helpers.fillArray)(sortDiff, false)));
  115. }
  116. if (groupDiff > 0) {
  117. var _internalOptions$grou;
  118. (_internalOptions$grou = internalOptions.groupDesc).push.apply(_internalOptions$grou, _toConsumableArray((0, _helpers.fillArray)(groupDiff, false)));
  119. }
  120. return {
  121. internalOptions: internalOptions
  122. };
  123. },
  124. computed: {
  125. itemsLength: function itemsLength() {
  126. return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length;
  127. },
  128. pageCount: function pageCount() {
  129. return this.internalOptions.itemsPerPage <= 0 ? 1 : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage);
  130. },
  131. pageStart: function pageStart() {
  132. if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0;
  133. return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage;
  134. },
  135. pageStop: function pageStop() {
  136. if (this.internalOptions.itemsPerPage === -1) return this.itemsLength;
  137. if (!this.items.length) return 0;
  138. return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage);
  139. },
  140. isGrouped: function isGrouped() {
  141. return !!this.internalOptions.groupBy.length;
  142. },
  143. pagination: function pagination() {
  144. return {
  145. page: this.internalOptions.page,
  146. itemsPerPage: this.internalOptions.itemsPerPage,
  147. pageStart: this.pageStart,
  148. pageStop: this.pageStop,
  149. pageCount: this.pageCount,
  150. itemsLength: this.itemsLength
  151. };
  152. },
  153. filteredItems: function filteredItems() {
  154. var items = this.items.slice();
  155. if (!this.disableFiltering && this.serverItemsLength <= 0) {
  156. items = this.customFilter(items, this.search);
  157. }
  158. return items;
  159. },
  160. computedItems: function computedItems() {
  161. var items = this.filteredItems.slice();
  162. if (!this.disableSort && this.serverItemsLength <= 0) {
  163. items = this.sortItems(items);
  164. }
  165. if (!this.disablePagination && this.serverItemsLength <= 0) {
  166. items = this.paginateItems(items);
  167. }
  168. return items;
  169. },
  170. groupedItems: function groupedItems() {
  171. return this.isGrouped ? this.groupItems(this.computedItems) : null;
  172. },
  173. scopedProps: function scopedProps() {
  174. var props = {
  175. sort: this.sort,
  176. sortArray: this.sortArray,
  177. group: this.group,
  178. items: this.computedItems,
  179. options: this.internalOptions,
  180. updateOptions: this.updateOptions,
  181. pagination: this.pagination,
  182. groupedItems: this.groupedItems,
  183. originalItemsLength: this.items.length
  184. };
  185. return props;
  186. },
  187. computedOptions: function computedOptions() {
  188. return _objectSpread({}, this.options);
  189. }
  190. },
  191. watch: {
  192. computedOptions: {
  193. handler: function handler(options, old) {
  194. if ((0, _helpers.deepEqual)(options, old)) return;
  195. this.updateOptions(options);
  196. },
  197. deep: true,
  198. immediate: true
  199. },
  200. internalOptions: {
  201. handler: function handler(options, old) {
  202. if ((0, _helpers.deepEqual)(options, old)) return;
  203. this.$emit('update:options', options);
  204. },
  205. deep: true,
  206. immediate: true
  207. },
  208. page: function page(_page) {
  209. this.updateOptions({
  210. page: _page
  211. });
  212. },
  213. 'internalOptions.page': function internalOptionsPage(page) {
  214. this.$emit('update:page', page);
  215. },
  216. itemsPerPage: function itemsPerPage(_itemsPerPage) {
  217. this.updateOptions({
  218. itemsPerPage: _itemsPerPage
  219. });
  220. },
  221. 'internalOptions.itemsPerPage': function internalOptionsItemsPerPage(itemsPerPage) {
  222. this.$emit('update:items-per-page', itemsPerPage);
  223. },
  224. sortBy: function sortBy(_sortBy) {
  225. this.updateOptions({
  226. sortBy: (0, _helpers.wrapInArray)(_sortBy)
  227. });
  228. },
  229. 'internalOptions.sortBy': function internalOptionsSortBy(sortBy, old) {
  230. !(0, _helpers.deepEqual)(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0]);
  231. },
  232. sortDesc: function sortDesc(_sortDesc) {
  233. this.updateOptions({
  234. sortDesc: (0, _helpers.wrapInArray)(_sortDesc)
  235. });
  236. },
  237. 'internalOptions.sortDesc': function internalOptionsSortDesc(sortDesc, old) {
  238. !(0, _helpers.deepEqual)(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0]);
  239. },
  240. groupBy: function groupBy(_groupBy) {
  241. this.updateOptions({
  242. groupBy: (0, _helpers.wrapInArray)(_groupBy)
  243. });
  244. },
  245. 'internalOptions.groupBy': function internalOptionsGroupBy(groupBy, old) {
  246. !(0, _helpers.deepEqual)(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0]);
  247. },
  248. groupDesc: function groupDesc(_groupDesc) {
  249. this.updateOptions({
  250. groupDesc: (0, _helpers.wrapInArray)(_groupDesc)
  251. });
  252. },
  253. 'internalOptions.groupDesc': function internalOptionsGroupDesc(groupDesc, old) {
  254. !(0, _helpers.deepEqual)(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0]);
  255. },
  256. multiSort: function multiSort(_multiSort) {
  257. this.updateOptions({
  258. multiSort: _multiSort
  259. });
  260. },
  261. 'internalOptions.multiSort': function internalOptionsMultiSort(multiSort) {
  262. this.$emit('update:multi-sort', multiSort);
  263. },
  264. mustSort: function mustSort(_mustSort) {
  265. this.updateOptions({
  266. mustSort: _mustSort
  267. });
  268. },
  269. 'internalOptions.mustSort': function internalOptionsMustSort(mustSort) {
  270. this.$emit('update:must-sort', mustSort);
  271. },
  272. pageCount: {
  273. handler: function handler(pageCount) {
  274. this.$emit('page-count', pageCount);
  275. },
  276. immediate: true
  277. },
  278. computedItems: {
  279. handler: function handler(computedItems) {
  280. this.$emit('current-items', computedItems);
  281. },
  282. immediate: true
  283. },
  284. pagination: {
  285. handler: function handler(pagination, old) {
  286. if ((0, _helpers.deepEqual)(pagination, old)) return;
  287. this.$emit('pagination', this.pagination);
  288. },
  289. immediate: true
  290. }
  291. },
  292. methods: {
  293. toggle: function toggle(key, oldBy, oldDesc, page, mustSort, multiSort) {
  294. var by = oldBy.slice();
  295. var desc = oldDesc.slice();
  296. var byIndex = by.findIndex(function (k) {
  297. return k === key;
  298. });
  299. if (byIndex < 0) {
  300. if (!multiSort) {
  301. by = [];
  302. desc = [];
  303. }
  304. by.push(key);
  305. desc.push(false);
  306. } else if (byIndex >= 0 && !desc[byIndex]) {
  307. desc[byIndex] = true;
  308. } else if (!mustSort) {
  309. by.splice(byIndex, 1);
  310. desc.splice(byIndex, 1);
  311. } else {
  312. desc[byIndex] = false;
  313. } // Reset page to 1 if sortBy or sortDesc have changed
  314. if (!(0, _helpers.deepEqual)(by, oldBy) || !(0, _helpers.deepEqual)(desc, oldDesc)) {
  315. page = 1;
  316. }
  317. return {
  318. by: by,
  319. desc: desc,
  320. page: page
  321. };
  322. },
  323. group: function group(key) {
  324. var _this$toggle = this.toggle(key, this.internalOptions.groupBy, this.internalOptions.groupDesc, this.internalOptions.page, true, false),
  325. groupBy = _this$toggle.by,
  326. groupDesc = _this$toggle.desc,
  327. page = _this$toggle.page;
  328. this.updateOptions({
  329. groupBy: groupBy,
  330. groupDesc: groupDesc,
  331. page: page
  332. });
  333. },
  334. sort: function sort(key) {
  335. if (Array.isArray(key)) return this.sortArray(key);
  336. var _this$toggle2 = this.toggle(key, this.internalOptions.sortBy, this.internalOptions.sortDesc, this.internalOptions.page, this.internalOptions.mustSort, this.internalOptions.multiSort),
  337. sortBy = _this$toggle2.by,
  338. sortDesc = _this$toggle2.desc,
  339. page = _this$toggle2.page;
  340. this.updateOptions({
  341. sortBy: sortBy,
  342. sortDesc: sortDesc,
  343. page: page
  344. });
  345. },
  346. sortArray: function sortArray(sortBy) {
  347. var _this = this;
  348. var sortDesc = sortBy.map(function (s) {
  349. var i = _this.internalOptions.sortBy.findIndex(function (k) {
  350. return k === s;
  351. });
  352. return i > -1 ? _this.internalOptions.sortDesc[i] : false;
  353. });
  354. this.updateOptions({
  355. sortBy: sortBy,
  356. sortDesc: sortDesc
  357. });
  358. },
  359. updateOptions: function updateOptions(options) {
  360. this.internalOptions = _objectSpread({}, this.internalOptions, {}, options, {
  361. page: this.serverItemsLength < 0 ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount)) : options.page || this.internalOptions.page
  362. });
  363. },
  364. sortItems: function sortItems(items) {
  365. var sortBy = this.internalOptions.sortBy;
  366. var sortDesc = this.internalOptions.sortDesc;
  367. if (this.internalOptions.groupBy.length) {
  368. sortBy = [].concat(_toConsumableArray(this.internalOptions.groupBy), _toConsumableArray(sortBy));
  369. sortDesc = [].concat(_toConsumableArray(this.internalOptions.groupDesc), _toConsumableArray(sortDesc));
  370. }
  371. return this.customSort(items, sortBy, sortDesc, this.locale);
  372. },
  373. groupItems: function groupItems(items) {
  374. return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc);
  375. },
  376. paginateItems: function paginateItems(items) {
  377. // Make sure we don't try to display non-existant page if items suddenly change
  378. // TODO: Could possibly move this to pageStart/pageStop?
  379. if (this.serverItemsLength === -1 && items.length <= this.pageStart) {
  380. this.internalOptions.page = Math.max(1, this.internalOptions.page - 1);
  381. }
  382. return items.slice(this.pageStart, this.pageStop);
  383. }
  384. },
  385. render: function render() {
  386. return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps);
  387. }
  388. });
  389. exports.default = _default2;
  390. //# sourceMappingURL=VData.js.map