tav-ui
Version:
217 lines (214 loc) • 7.13 kB
JavaScript
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