2c79f121f2f0675ac2a4dd24af57c628388cb871e1852f26aa6d3c820cfbf94554584116414e70843c166eb3875741a1c76dad29c908f6401518e1d0f51cd9 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { inject, computed } from 'vue';
  2. import { TABLE_INJECTION_KEY } from '../tokens.mjs';
  3. const getAllColumns = (columns) => {
  4. const result = [];
  5. columns.forEach((column) => {
  6. if (column.children) {
  7. result.push(column);
  8. result.push.apply(result, getAllColumns(column.children));
  9. } else {
  10. result.push(column);
  11. }
  12. });
  13. return result;
  14. };
  15. const convertToRows = (originColumns) => {
  16. let maxLevel = 1;
  17. const traverse = (column, parent) => {
  18. if (parent) {
  19. column.level = parent.level + 1;
  20. if (maxLevel < column.level) {
  21. maxLevel = column.level;
  22. }
  23. }
  24. if (column.children) {
  25. let colSpan = 0;
  26. column.children.forEach((subColumn) => {
  27. traverse(subColumn, column);
  28. colSpan += subColumn.colSpan;
  29. });
  30. column.colSpan = colSpan;
  31. } else {
  32. column.colSpan = 1;
  33. }
  34. };
  35. originColumns.forEach((column) => {
  36. column.level = 1;
  37. traverse(column, void 0);
  38. });
  39. const rows = [];
  40. for (let i = 0; i < maxLevel; i++) {
  41. rows.push([]);
  42. }
  43. const allColumns = getAllColumns(originColumns);
  44. allColumns.forEach((column) => {
  45. if (!column.children) {
  46. column.rowSpan = maxLevel - column.level + 1;
  47. } else {
  48. column.rowSpan = 1;
  49. column.children.forEach((col) => col.isSubColumn = true);
  50. }
  51. rows[column.level - 1].push(column);
  52. });
  53. return rows;
  54. };
  55. function useUtils(props) {
  56. const parent = inject(TABLE_INJECTION_KEY);
  57. const columnRows = computed(() => {
  58. return convertToRows(props.store.states.originColumns.value);
  59. });
  60. const isGroup = computed(() => {
  61. const result = columnRows.value.length > 1;
  62. if (result && parent) {
  63. parent.state.isGroup.value = true;
  64. }
  65. return result;
  66. });
  67. const toggleAllSelection = (event) => {
  68. event.stopPropagation();
  69. parent == null ? void 0 : parent.store.commit("toggleAllSelection");
  70. };
  71. return {
  72. isGroup,
  73. toggleAllSelection,
  74. columnRows
  75. };
  76. }
  77. export { convertToRows, useUtils as default };
  78. //# sourceMappingURL=utils-helper.mjs.map