useColumns.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useColumns;
  7. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _devWarning = _interopRequireDefault(require("../../vc-util/devWarning"));
  9. var _useSelection = require("./useSelection");
  10. var _vcTable = require("../../vc-table");
  11. var _vnode = require("../../_util/vnode");
  12. function fillSlots(columns, contextSlots) {
  13. const $slots = contextSlots.value;
  14. return columns.map(column => {
  15. var _a;
  16. if (column === _useSelection.SELECTION_COLUMN || column === _vcTable.EXPAND_COLUMN) return column;
  17. const cloneColumn = (0, _extends2.default)({}, column);
  18. const {
  19. slots = {}
  20. } = cloneColumn;
  21. cloneColumn.__originColumn__ = column;
  22. (0, _devWarning.default)(!('slots' in cloneColumn), 'Table', '`column.slots` is deprecated. Please use `v-slot:headerCell` `v-slot:bodyCell` instead.');
  23. Object.keys(slots).forEach(key => {
  24. const name = slots[key];
  25. if (cloneColumn[key] === undefined && $slots[name]) {
  26. cloneColumn[key] = $slots[name];
  27. }
  28. });
  29. if (contextSlots.value.headerCell && !((_a = column.slots) === null || _a === void 0 ? void 0 : _a.title)) {
  30. cloneColumn.title = (0, _vnode.customRenderSlot)(contextSlots.value, 'headerCell', {
  31. title: column.title,
  32. column
  33. }, () => [column.title]);
  34. }
  35. if ('children' in cloneColumn && Array.isArray(cloneColumn.children)) {
  36. cloneColumn.children = fillSlots(cloneColumn.children, contextSlots);
  37. }
  38. return cloneColumn;
  39. });
  40. }
  41. function useColumns(contextSlots) {
  42. const filledColumns = columns => fillSlots(columns, contextSlots);
  43. return [filledColumns];
  44. }