UNPKG

tav-ui

Version:
217 lines (214 loc) 7.13 kB
import { createVNode, unref, toRaw } from 'vue'; import { Checkbox } from 'ant-design-vue'; import { SELECT_COMPONENTS, MIN_WIDTH_SMALL, ACTION_COLUMNS, MIN_WIDTH, ComponentCellName } from '../const2.mjs'; function autoAddChoosenElement(columns = [], checkboxConfig, radioConfig, tableRef, emit, isCheckboxCacheEnabled, createCheckboxCache, createAllCheckboxCache, deleteCheckboxCache, deleteAllCheckboxCache) { const isColumnsHasCheckbox = columns?.find((column) => column.type === "checkbox"); const isColumnsHasRadio = columns?.find((column) => column.type === "radio"); if (!columns.length) return columns; if (!isColumnsHasCheckbox && checkboxConfig.enabled) { columns.unshift({ field: "checkboxField", type: "checkbox", fixed: "left", slots: { header: (info) => { const { checked, indeterminate } = info; return [createVNode(Checkbox, { "indeterminate": indeterminate, "checked": checked, "onChange": async () => { const result = { ...info, checked: !checked }; if (isCheckboxCacheEnabled.value) { const { fullData } = unref(tableRef).getTableData(); if (result.checked) { await createAllCheckboxCache(toRaw(fullData)); } else { await deleteAllCheckboxCache({ deleteByPage: true }); } } else { await unref(tableRef)?.toggleAllCheckboxRow(); } emit("CheckboxAll", { ...result }); } }, null)]; }, checkbox: (info) => { const { row, checked, indeterminate } = info; return [createVNode(Checkbox, { "indeterminate": indeterminate, "checked": checked, "onChange": async () => { const result = { ...info, checked: !checked }; if (isCheckboxCacheEnabled.value) { if (result.checked) { await createCheckboxCache(toRaw(result.row)); } else { await deleteCheckboxCache(toRaw(result.row)); } } else { await unref(tableRef)?.toggleCheckboxRow(row); } emit("CheckboxChange", { ...result }); } }, null)]; } } }); } if (!isColumnsHasRadio && radioConfig.enabled) { columns.unshift({ field: "radioField", type: "radio", fixed: "left" }); } return columns; } function setColumnMinWidth(columns) { return columns.length ? columns?.map((column) => { if (column.type && SELECT_COMPONENTS.includes(column.type)) { if (!column.width) column.width = MIN_WIDTH_SMALL; } else if (column.field && ACTION_COLUMNS.includes(column.field)) { if (!column.minWidth) { if (!column.width) { column.minWidth = MIN_WIDTH_SMALL + 15; } else { column.minWidth = column.width; } } } else { if (!column.minWidth) { if (!column.width) { column.minWidth = MIN_WIDTH; } else { column.minWidth = column.width; } } } return column; }) : columns; } function wrapperColumnSlot(columns) { const handleWrapper = (column) => { const { customRender } = column; column["cellRender"] = { name: ComponentCellName, options: [{ customRender }] }; return column; }; return columns.length ? columns.map((column) => { const { children } = column; if (children && children.length) { column.children = children.map((_column) => handleWrapper(_column)); return column; } else { return handleWrapper(column); } }) : columns; } function setFixedColumnVisible(columns) { const handler = (column) => { if (column.fixed && !column.visible) { column.visible = true; } return column; }; return columns.length ? columns?.map((column) => { const { children } = column; if (children && children.length) { column.children = children.map((_column) => handler(_column)); return handler(column); } else { return handler(column); } }) : columns; } function setFixedMultiHeader(columns) { let fixed = []; const handler = (column, idx, parentColumn) => { if (parentColumn) { if (Reflect.has(parentColumn, "fixed")) { column.fixed = parentColumn.fixed; } else { fixed.push(column.fixed); } if (idx === parentColumn.children.length - 1 && fixed.length) { const fixedResult = fixed.filter((val) => val !== void 0); parentColumn.fixed = fixedResult.length ? fixedResult[0] : void 0; parentColumn.children.forEach((childColumn) => childColumn.fixed = parentColumn.fixed); } } return column; }; return columns.length ? columns?.map((column) => { const { children } = column; if (children && children.length) { fixed = []; column.children = children.map((_column, idx) => handler(_column, idx, column)); return handler(column); } else { return handler(column); } }) : columns; } function setVisibleMultiHeader(columns) { const handler = (column, parentVisible) => { if (parentVisible === false) { column.visible = false; } else if (parentVisible === true && column.visible === void 0) { column.visible = true; } if (column.children && column.children.length) { column.children.forEach((childColumn) => handler(childColumn, column.visible)); if (column.children.every((child) => child.visible === false)) { column.visible = false; } } return column; }; return columns.length ? columns.map((column) => handler(column, column.visible)) : columns; } function useColumns(columns = [], checkboxConfig, radioConfig, tableRef, emit, isCheckboxCacheEnabled, createCheckboxCache, createAllCheckboxCache, deleteCheckboxCache, deleteAllCheckboxCache) { const autoAddChoosenElementColumns = autoAddChoosenElement(columns, checkboxConfig, radioConfig, tableRef, emit, isCheckboxCacheEnabled, createCheckboxCache, createAllCheckboxCache, deleteCheckboxCache, deleteAllCheckboxCache); const setColumnMinWidthColumns = setColumnMinWidth(autoAddChoosenElementColumns); const setFixedMultiHeaderColumns = setFixedMultiHeader(setColumnMinWidthColumns); const setVisibleMultiHeaderColumns = setVisibleMultiHeader(setFixedMultiHeaderColumns); const setFixedColumnVisibleColumns = setFixedColumnVisible(setVisibleMultiHeaderColumns); return wrapperColumnSlot(setFixedColumnVisibleColumns); } export { useColumns }; //# sourceMappingURL=useColums2.mjs.map