UNPKG

@opentiny/vue-renderless

Version:

An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.

281 lines (280 loc) 9.48 kB
import "../chunk-G2ADBYYC.js"; import { copyArray } from "@opentiny/utils"; import { getFlatData } from "../transfer"; const showFilterData = (data, sign) => { const getChild = (data2, sign2) => data2.filter((node) => { if (node.children && node.children.length > 0) { node.children = getChild(node.children, sign2); } return node[sign2]; }); return getChild(data, sign); }; const getFilterData = ({ api, props, state, Table, Tree }) => () => { if (state.renderType === Table) { let tableData = []; if (props.filterMethod) { tableData = props.data.filter((item) => props.filterMethod(state.query, item)); } else { tableData = props.data; } state.pagerTotal = tableData; if (props.showPager) { const pageSize = state.sizes || 10; const totalPageCount = Math.ceil(tableData.length / pageSize); if (state.internalPage > totalPageCount) { api.handlePageChange(totalPageCount); } if (totalPageCount > 0 && state.internalPage === 0) { state.internalPage = 1; } if (totalPageCount > 0 && state.currentPage === 0) { state.currentPage = 1; } return tableData.slice((state.internalPage - 1) * pageSize, pageSize * state.internalPage); } else { return tableData; } } else if (state.renderType === Tree) { return showFilterData(api.getFilterTreeData(copyArray(props.data)), "visible"); } else { return props.data.filter((item) => { if (typeof props.filterMethod === "function") { return props.filterMethod(state.query, item); } else { const label = item[state.labelProp] || item[state.keyProp].toString(); return label.toLowerCase().includes(state.query.toLowerCase()); } }); } }; const getCheckableData = ({ api, state, Tree }) => () => { if (state.renderType === Tree) { return api.getTreeCheckableData(state.filteredData); } else { return state.filteredData.filter((item) => !item[state.disabledProp]); } }; const getCheckedSummary = ({ props, state, Tree }) => () => { const checkedLength = state.checked.length; let dataLength = 0; if (state.renderType === Tree) { dataLength = getFlatData(copyArray(props.data)).length; } else { dataLength = props.data.length; } const { noChecked, hasChecked } = props.format; if (noChecked && hasChecked) { return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength).replace(/\${total}/g, dataLength) : noChecked.replace(/\${checked}/g, checkedLength).replace(/\${total}/g, dataLength); } else { return `${checkedLength} / ${dataLength}`; } }; const getDeteminate = (state) => () => state.checked.length > 0 && state.checked.length < state.checkableData.length; const watchChecked = ({ api, emit, state }) => ({ value, oldvalue }) => { api.updateAllChecked(); if (state.checkChangeByUser) { const movedKeys = value.concat(oldvalue).filter((v) => !value.includes(v) || !oldvalue.includes(v)); emit("checked-change", value, movedKeys); } else { emit("checked-change", value); state.checkChangeByUser = true; } }; const watchData = ({ api, props, state, Tree }) => (value) => { state.pagerTotal = value; const checked = []; if (state.renderType === Tree && !props.treeOp.checkStrictly) { state.checked = api.getStrictData(state.filteredData).keys; } else { const filteredDataKeys = state.filteredData.map((item) => item[state.keyProp]); state.checked.forEach((item) => { if (filteredDataKeys.includes(item)) { checked.push(item); } }); state.checkChangeByUser = false; state.checked = checked; } }; const watchDefaultCheckded = ({ api, props, state, Tree }) => ({ value, oldvalue }) => { if (oldvalue && value.length === oldvalue.length && value.every((item) => oldvalue.includes(item))) { return; } if (state.renderType === Tree && !props.treeOp.checkStrictly) { if (!state.render) { return; } state.render.defaultCheckedKeys = state.checked = api.getStrictData(state.filteredData).keys; } else { const checked = []; const checkableDataKeys = state.checkableData.map((item) => item[state.keyProp]); value.forEach((item) => { if (checkableDataKeys.includes(item)) { checked.push(item); } }); state.checkChangeByUser = false; state.checked = checked; } }; const updateAllChecked = ({ state, Table, Tree }) => () => { const checkableDataKeys = state.checkableData.map((item) => item[state.keyProp]); state.allChecked = checkableDataKeys && checkableDataKeys.length > 0 && checkableDataKeys.every((item) => state.checked.includes(item)); if (state.renderType === Table || state.renderType === Tree) { state.render.data = state.filteredData; if (state.renderType === Tree) { state.render.defaultCheckedKeys = state.checked; } else { const pageCheckedKeys = []; state.filteredData.forEach((data) => { state.checked.includes(data[state.keyProp]) && pageCheckedKeys.push(data[state.keyProp]); }); state.render.defaultChecked = pageCheckedKeys; } } }; const handleAllCheckedChange = ({ state, Table, Tree, vm }) => (value) => { state.checked = value ? state.checkableData.map((item) => item[state.keyProp]) : []; if (state.renderType === Table) { state.render.defaultChecked = state.checked; } else if (state.renderType === Tree) { state.checked.length !== 0 ? state.render.defaultCheckedKeys = state.checked : vm.$refs.plugin.setCheckedKeys(state.checked); } }; const clearQuery = (state) => () => { if (state.inputIcon === "circle-close") { state.query = ""; } }; const checkedEvent = (state) => (value, disabled) => { if (disabled) { return; } const index = state.checked.indexOf(value); let tmpArray = [...state.checked]; if (~index) { tmpArray.splice(index, 1); state.checked = tmpArray; } else { tmpArray.push(value); state.checked = tmpArray; } }; const setPosition = ({ parent, state }) => (trend, event) => { event.stopPropagation(); event.preventDefault(); const checkedKey = []; const uncheckedKey = []; state.filteredData.forEach((item) => { if (~state.checked.indexOf(item[state.keyProp])) { checkedKey.push(item[state.keyProp]); } else { uncheckedKey.push(item[state.keyProp]); } }); const result = trend === "up" ? [...checkedKey, ...uncheckedKey] : [...uncheckedKey, ...checkedKey]; parent.$parent.$emit("update:modelValue", result); }; const selectChange = (state) => (keys) => state.checked = keys; const handlePageChange = (state) => (currentPage) => { state.pageChangeData = true; state.internalPage = currentPage; state.currentPage = currentPage; }; const getFilterTreeData = ({ props, state }) => (data) => { const getChild = (data2, query) => { data2.forEach((node) => { if (node.__disabled) { node.disabled = true; } else if (!props.showLeft) { node.disabled = false; } const label = node[state.labelProp]; if (typeof props.treeOp.filterNodeMethod === "function") { const result = props.treeOp.filterNodeMethod(state.query, node); if (typeof result !== "boolean") { node.visible = true; } else { node.visible = result; } } else { node.visible = label.toLowerCase().includes(query.toLowerCase()); } if (node.children && node.children.length > 0) { getChild(node.children, query); } if (!node.visible && node.children && node.children.length) { let allHidden = true; allHidden = !node.children.some((child) => child.visible); node.visible = allHidden === false; } }); }; getChild(data, state.query); return data; }; const getTreeCheckableData = (state) => (data) => { const nodes = []; const getChild = (data2) => { data2.forEach((node) => { !node[state.disabledProp] && nodes.push(node); if (node.children && node.children.length > 0) { getChild(node.children); } }); }; getChild(data); return nodes; }; const getStrictData = ({ props, state }) => (data) => { const keys = []; const strictData = (data2, isStrict) => { data2.forEach((node) => { if (props.defaultChecked.includes(node[state.keyProp])) { node.isCheckable = true; keys.push(node[state.keyProp]); } else { node.isCheckable = isStrict; isStrict && keys.push(node[state.keyProp]); } if (node.children && node.children.length > 0) { strictData(node.children, node.isCheckable); } }); }; strictData(data, false); return { data, keys }; }; const sizesChange = (state) => (sizes) => state.sizes = sizes; const setExpandCache = (state) => (node, expand) => { const { expanded, keyProp } = state; const index = state.expanded.indexOf(node[keyProp]); if (expand) { index === -1 && expanded.push(node[keyProp]); } else { index !== -1 && expanded.splice(index, 1); } }; export { checkedEvent, clearQuery, getCheckableData, getCheckedSummary, getDeteminate, getFilterData, getFilterTreeData, getStrictData, getTreeCheckableData, handleAllCheckedChange, handlePageChange, selectChange, setExpandCache, setPosition, showFilterData, sizesChange, updateAllChecked, watchChecked, watchData, watchDefaultCheckded };