UNPKG

tav-ui

Version:
83 lines (80 loc) 2.54 kB
import { unref } from 'vue'; import { isString, isFunction } from '../../../../utils/is2.mjs'; import { ROW_KEY } from '../const2.mjs'; function getKey(record, rowKey, autoCreateKey) { if (!rowKey || autoCreateKey) { return record[ROW_KEY]; } if (isString(rowKey)) { return record[rowKey]; } if (isFunction(rowKey)) { return record[rowKey(record)]; } return null; } function useCustomRow(propsRef, { setSelectedRowKeys, getSelectRowKeys, getAutoCreateKey, clearSelectedRowKeys, emit }) { const customRow = (record, index) => { return { onClick: (e) => { e?.stopPropagation(); function handleClick() { const { rowSelection, rowKey, clickToRowSelect } = unref(propsRef); if (!rowSelection || !clickToRowSelect) return; const keys = getSelectRowKeys(); const key = getKey(record, rowKey, unref(getAutoCreateKey)); if (!key) return; const isCheckbox = rowSelection.type === "checkbox"; if (isCheckbox) { const tr = e.composedPath?.().find((dom) => dom.tagName === "TR"); if (!tr) return; const checkBox = tr.querySelector("input[type=checkbox]"); if (!checkBox || checkBox.hasAttribute("disabled")) return; if (!keys.includes(key)) { setSelectedRowKeys([...keys, key]); return; } const keyIndex = keys.findIndex((item) => item === key); keys.splice(keyIndex, 1); setSelectedRowKeys(keys); return; } const isRadio = rowSelection.type === "radio"; if (isRadio) { if (!keys.includes(key)) { if (keys.length) { clearSelectedRowKeys(); } setSelectedRowKeys([key]); return; } clearSelectedRowKeys(); } } handleClick(); emit("row-click", record, index, e); }, onDblclick: (event) => { emit("row-dbClick", record, index, event); }, onContextmenu: (event) => { emit("row-contextmenu", record, index, event); }, onMouseenter: (event) => { emit("row-mouseenter", record, index, event); }, onMouseleave: (event) => { emit("row-mouseleave", record, index, event); } }; }; return { customRow }; } export { useCustomRow }; //# sourceMappingURL=useCustomRow2.mjs.map