useColumns.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import devWarning from '../../vc-util/devWarning';
  3. import { renderSlot } from 'vue';
  4. import { SELECTION_COLUMN } from './useSelection';
  5. import { EXPAND_COLUMN } from '../../vc-table';
  6. function fillSlots(columns, contextSlots) {
  7. var $slots = contextSlots.value;
  8. return columns.map(function (column) {
  9. var _column$slots;
  10. if (column === SELECTION_COLUMN || column === EXPAND_COLUMN) return column;
  11. var cloneColumn = _objectSpread({}, column);
  12. var _cloneColumn$slots = cloneColumn.slots,
  13. slots = _cloneColumn$slots === void 0 ? {} : _cloneColumn$slots;
  14. cloneColumn.__originColumn__ = column;
  15. devWarning(!('slots' in cloneColumn), 'Table', '`column.slots` is deprecated. Please use `v-slot:headerCell` `v-slot:bodyCell` instead.');
  16. Object.keys(slots).forEach(function (key) {
  17. var name = slots[key];
  18. if (cloneColumn[key] === undefined && $slots[name]) {
  19. cloneColumn[key] = $slots[name];
  20. }
  21. });
  22. if (contextSlots.value.headerCell && !((_column$slots = column.slots) !== null && _column$slots !== void 0 && _column$slots.title)) {
  23. cloneColumn.title = renderSlot(contextSlots.value, 'headerCell', {
  24. title: column.title,
  25. column: column
  26. }, function () {
  27. return [column.title];
  28. });
  29. }
  30. if ('children' in cloneColumn) {
  31. cloneColumn.children = fillSlots(cloneColumn.children, contextSlots);
  32. }
  33. return cloneColumn;
  34. });
  35. }
  36. export default function useColumns(contextSlots) {
  37. var filledColumns = function filledColumns(columns) {
  38. return fillSlots(columns, contextSlots);
  39. };
  40. return [filledColumns];
  41. }