useColumns.js 1.5 KB

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