1a969ec9313ce5e4c6010498640602e3958237a1dbe461217b642b9414e1ab94e706794eda69c3d1a8c744dc2ce659270a9b6cfbfafef58f42cc715aaa1d02 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var iconsVue = require('@element-plus/icons-vue');
  5. var constants = require('./constants.js');
  6. var prev = require('./components/prev2.js');
  7. var next = require('./components/next2.js');
  8. var sizes = require('./components/sizes.js');
  9. var jumper = require('./components/jumper2.js');
  10. var total = require('./components/total2.js');
  11. var pager = require('./components/pager2.js');
  12. var index = require('../../../hooks/use-size/index.js');
  13. var runtime = require('../../../utils/vue/props/runtime.js');
  14. var types = require('../../../utils/types.js');
  15. var typescript = require('../../../utils/typescript.js');
  16. var icon = require('../../../utils/vue/icon.js');
  17. var index$1 = require('../../../hooks/use-locale/index.js');
  18. var index$2 = require('../../../hooks/use-namespace/index.js');
  19. var index$3 = require('../../../hooks/use-deprecated/index.js');
  20. var event = require('../../../constants/event.js');
  21. var error = require('../../../utils/error.js');
  22. const isAbsent = (v) => typeof v !== "number";
  23. const paginationProps = runtime.buildProps({
  24. pageSize: Number,
  25. defaultPageSize: Number,
  26. total: Number,
  27. pageCount: Number,
  28. pagerCount: {
  29. type: Number,
  30. validator: (value) => {
  31. return types.isNumber(value) && Math.trunc(value) === value && value > 4 && value < 22 && value % 2 === 1;
  32. },
  33. default: 7
  34. },
  35. currentPage: Number,
  36. defaultCurrentPage: Number,
  37. layout: {
  38. type: String,
  39. default: ["prev", "pager", "next", "jumper", "->", "total"].join(", ")
  40. },
  41. pageSizes: {
  42. type: runtime.definePropType(Array),
  43. default: () => typescript.mutable([10, 20, 30, 40, 50, 100])
  44. },
  45. popperClass: {
  46. type: String,
  47. default: ""
  48. },
  49. prevText: {
  50. type: String,
  51. default: ""
  52. },
  53. prevIcon: {
  54. type: icon.iconPropType,
  55. default: () => iconsVue.ArrowLeft
  56. },
  57. nextText: {
  58. type: String,
  59. default: ""
  60. },
  61. nextIcon: {
  62. type: icon.iconPropType,
  63. default: () => iconsVue.ArrowRight
  64. },
  65. teleported: {
  66. type: Boolean,
  67. default: true
  68. },
  69. small: Boolean,
  70. size: index.useSizeProp,
  71. background: Boolean,
  72. disabled: Boolean,
  73. hideOnSinglePage: Boolean,
  74. appendSizeTo: String
  75. });
  76. const paginationEmits = {
  77. "update:current-page": (val) => types.isNumber(val),
  78. "update:page-size": (val) => types.isNumber(val),
  79. "size-change": (val) => types.isNumber(val),
  80. change: (currentPage, pageSize) => types.isNumber(currentPage) && types.isNumber(pageSize),
  81. "current-change": (val) => types.isNumber(val),
  82. "prev-click": (val) => types.isNumber(val),
  83. "next-click": (val) => types.isNumber(val)
  84. };
  85. const componentName = "ElPagination";
  86. var Pagination = vue.defineComponent({
  87. name: componentName,
  88. props: paginationProps,
  89. emits: paginationEmits,
  90. setup(props, { emit, slots }) {
  91. const { t } = index$1.useLocale();
  92. const ns = index$2.useNamespace("pagination");
  93. const vnodeProps = vue.getCurrentInstance().vnode.props || {};
  94. const _globalSize = index.useGlobalSize();
  95. const _size = vue.computed(() => {
  96. var _a;
  97. return props.small ? "small" : (_a = props.size) != null ? _a : _globalSize.value;
  98. });
  99. index$3.useDeprecated({
  100. from: "small",
  101. replacement: "size",
  102. version: "3.0.0",
  103. scope: "el-pagination",
  104. ref: "https://element-plus.org/zh-CN/component/pagination.html"
  105. }, vue.computed(() => !!props.small));
  106. const hasCurrentPageListener = "onUpdate:currentPage" in vnodeProps || "onUpdate:current-page" in vnodeProps || "onCurrentChange" in vnodeProps;
  107. const hasPageSizeListener = "onUpdate:pageSize" in vnodeProps || "onUpdate:page-size" in vnodeProps || "onSizeChange" in vnodeProps;
  108. const assertValidUsage = vue.computed(() => {
  109. if (isAbsent(props.total) && isAbsent(props.pageCount))
  110. return false;
  111. if (!isAbsent(props.currentPage) && !hasCurrentPageListener)
  112. return false;
  113. if (props.layout.includes("sizes")) {
  114. if (!isAbsent(props.pageCount)) {
  115. if (!hasPageSizeListener)
  116. return false;
  117. } else if (!isAbsent(props.total)) {
  118. if (!isAbsent(props.pageSize)) {
  119. if (!hasPageSizeListener) {
  120. return false;
  121. }
  122. }
  123. }
  124. }
  125. return true;
  126. });
  127. const innerPageSize = vue.ref(isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize);
  128. const innerCurrentPage = vue.ref(isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage);
  129. const pageSizeBridge = vue.computed({
  130. get() {
  131. return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize;
  132. },
  133. set(v) {
  134. if (isAbsent(props.pageSize)) {
  135. innerPageSize.value = v;
  136. }
  137. if (hasPageSizeListener) {
  138. emit("update:page-size", v);
  139. emit("size-change", v);
  140. }
  141. }
  142. });
  143. const pageCountBridge = vue.computed(() => {
  144. let pageCount = 0;
  145. if (!isAbsent(props.pageCount)) {
  146. pageCount = props.pageCount;
  147. } else if (!isAbsent(props.total)) {
  148. pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value));
  149. }
  150. return pageCount;
  151. });
  152. const currentPageBridge = vue.computed({
  153. get() {
  154. return isAbsent(props.currentPage) ? innerCurrentPage.value : props.currentPage;
  155. },
  156. set(v) {
  157. let newCurrentPage = v;
  158. if (v < 1) {
  159. newCurrentPage = 1;
  160. } else if (v > pageCountBridge.value) {
  161. newCurrentPage = pageCountBridge.value;
  162. }
  163. if (isAbsent(props.currentPage)) {
  164. innerCurrentPage.value = newCurrentPage;
  165. }
  166. if (hasCurrentPageListener) {
  167. emit("update:current-page", newCurrentPage);
  168. emit("current-change", newCurrentPage);
  169. }
  170. }
  171. });
  172. vue.watch(pageCountBridge, (val) => {
  173. if (currentPageBridge.value > val)
  174. currentPageBridge.value = val;
  175. });
  176. vue.watch([currentPageBridge, pageSizeBridge], (value) => {
  177. emit(event.CHANGE_EVENT, ...value);
  178. }, { flush: "post" });
  179. function handleCurrentChange(val) {
  180. currentPageBridge.value = val;
  181. }
  182. function handleSizeChange(val) {
  183. pageSizeBridge.value = val;
  184. const newPageCount = pageCountBridge.value;
  185. if (currentPageBridge.value > newPageCount) {
  186. currentPageBridge.value = newPageCount;
  187. }
  188. }
  189. function prev$1() {
  190. if (props.disabled)
  191. return;
  192. currentPageBridge.value -= 1;
  193. emit("prev-click", currentPageBridge.value);
  194. }
  195. function next$1() {
  196. if (props.disabled)
  197. return;
  198. currentPageBridge.value += 1;
  199. emit("next-click", currentPageBridge.value);
  200. }
  201. function addClass(element, cls) {
  202. if (element) {
  203. if (!element.props) {
  204. element.props = {};
  205. }
  206. element.props.class = [element.props.class, cls].join(" ");
  207. }
  208. }
  209. vue.provide(constants.elPaginationKey, {
  210. pageCount: pageCountBridge,
  211. disabled: vue.computed(() => props.disabled),
  212. currentPage: currentPageBridge,
  213. changeEvent: handleCurrentChange,
  214. handleSizeChange
  215. });
  216. return () => {
  217. var _a, _b;
  218. if (!assertValidUsage.value) {
  219. error.debugWarn(componentName, t("el.pagination.deprecationWarning"));
  220. return null;
  221. }
  222. if (!props.layout)
  223. return null;
  224. if (props.hideOnSinglePage && pageCountBridge.value <= 1)
  225. return null;
  226. const rootChildren = [];
  227. const rightWrapperChildren = [];
  228. const rightWrapperRoot = vue.h("div", { class: ns.e("rightwrapper") }, rightWrapperChildren);
  229. const TEMPLATE_MAP = {
  230. prev: vue.h(prev["default"], {
  231. disabled: props.disabled,
  232. currentPage: currentPageBridge.value,
  233. prevText: props.prevText,
  234. prevIcon: props.prevIcon,
  235. onClick: prev$1
  236. }),
  237. jumper: vue.h(jumper["default"], {
  238. size: _size.value
  239. }),
  240. pager: vue.h(pager["default"], {
  241. currentPage: currentPageBridge.value,
  242. pageCount: pageCountBridge.value,
  243. pagerCount: props.pagerCount,
  244. onChange: handleCurrentChange,
  245. disabled: props.disabled
  246. }),
  247. next: vue.h(next["default"], {
  248. disabled: props.disabled,
  249. currentPage: currentPageBridge.value,
  250. pageCount: pageCountBridge.value,
  251. nextText: props.nextText,
  252. nextIcon: props.nextIcon,
  253. onClick: next$1
  254. }),
  255. sizes: vue.h(sizes["default"], {
  256. pageSize: pageSizeBridge.value,
  257. pageSizes: props.pageSizes,
  258. popperClass: props.popperClass,
  259. disabled: props.disabled,
  260. teleported: props.teleported,
  261. size: _size.value,
  262. appendSizeTo: props.appendSizeTo
  263. }),
  264. slot: (_b = (_a = slots == null ? void 0 : slots.default) == null ? void 0 : _a.call(slots)) != null ? _b : null,
  265. total: vue.h(total["default"], { total: isAbsent(props.total) ? 0 : props.total })
  266. };
  267. const components = props.layout.split(",").map((item) => item.trim());
  268. let haveRightWrapper = false;
  269. components.forEach((c) => {
  270. if (c === "->") {
  271. haveRightWrapper = true;
  272. return;
  273. }
  274. if (!haveRightWrapper) {
  275. rootChildren.push(TEMPLATE_MAP[c]);
  276. } else {
  277. rightWrapperChildren.push(TEMPLATE_MAP[c]);
  278. }
  279. });
  280. addClass(rootChildren[0], ns.is("first"));
  281. addClass(rootChildren[rootChildren.length - 1], ns.is("last"));
  282. if (haveRightWrapper && rightWrapperChildren.length > 0) {
  283. addClass(rightWrapperChildren[0], ns.is("first"));
  284. addClass(rightWrapperChildren[rightWrapperChildren.length - 1], ns.is("last"));
  285. rootChildren.push(rightWrapperRoot);
  286. }
  287. return vue.h("div", {
  288. class: [
  289. ns.b(),
  290. ns.is("background", props.background),
  291. ns.m(_size.value)
  292. ]
  293. }, rootChildren);
  294. };
  295. }
  296. });
  297. exports["default"] = Pagination;
  298. exports.paginationEmits = paginationEmits;
  299. exports.paginationProps = paginationProps;
  300. //# sourceMappingURL=pagination.js.map