fix: tree fieldNames error #4726
parent
62c6f0e0d0
commit
ac70da19f5
|
@ -28,13 +28,17 @@ export function calcRangeKeys({
|
||||||
expandedKeys,
|
expandedKeys,
|
||||||
startKey,
|
startKey,
|
||||||
endKey,
|
endKey,
|
||||||
fieldNames,
|
fieldNames = {
|
||||||
|
title: 'title',
|
||||||
|
key: 'key',
|
||||||
|
children: 'children',
|
||||||
|
},
|
||||||
}: {
|
}: {
|
||||||
treeData: DataNode[];
|
treeData: DataNode[];
|
||||||
expandedKeys: Key[];
|
expandedKeys: Key[];
|
||||||
startKey?: Key;
|
startKey?: Key;
|
||||||
endKey?: Key;
|
endKey?: Key;
|
||||||
fieldNames: FieldNames;
|
fieldNames?: FieldNames;
|
||||||
}): Key[] {
|
}): Key[] {
|
||||||
const keys: Key[] = [];
|
const keys: Key[] = [];
|
||||||
let record: Record = Record.None;
|
let record: Record = Record.None;
|
||||||
|
|
|
@ -71,20 +71,17 @@ export function getMinimumRangeTransitionRange(
|
||||||
}
|
}
|
||||||
|
|
||||||
function itemKey(item: FlattenNode) {
|
function itemKey(item: FlattenNode) {
|
||||||
const {
|
const { key, pos } = item;
|
||||||
data: { key },
|
|
||||||
pos,
|
|
||||||
} = item;
|
|
||||||
return getKey(key, pos);
|
return getKey(key, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAccessibilityPath(item: FlattenNode): string {
|
function getAccessibilityPath(item: FlattenNode): string {
|
||||||
let path = String(item.data.key);
|
let path = String(item.key);
|
||||||
let current = item;
|
let current = item;
|
||||||
|
|
||||||
while (current.parent) {
|
while (current.parent) {
|
||||||
current = current.parent;
|
current = current.parent;
|
||||||
path = `${current.data.key} > ${path}`;
|
path = `${current.key} > ${path}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
|
@ -104,7 +101,6 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
getIndentWidth: () => indentMeasurerRef.value.offsetWidth,
|
getIndentWidth: () => indentMeasurerRef.value.offsetWidth,
|
||||||
});
|
});
|
||||||
|
|
||||||
// ============================== Motion ==============================
|
// ============================== Motion ==============================
|
||||||
const transitionData = ref<FlattenNode[]>(props.data);
|
const transitionData = ref<FlattenNode[]>(props.data);
|
||||||
const transitionRange = ref([]);
|
const transitionRange = ref([]);
|
||||||
|
@ -121,12 +117,10 @@ export default defineComponent({
|
||||||
[() => [...props.expandedKeys], () => props.data],
|
[() => [...props.expandedKeys], () => props.data],
|
||||||
([expandedKeys, data], [prevExpandedKeys, prevData]) => {
|
([expandedKeys, data], [prevExpandedKeys, prevData]) => {
|
||||||
const diffExpanded = findExpandedKeys(prevExpandedKeys, expandedKeys);
|
const diffExpanded = findExpandedKeys(prevExpandedKeys, expandedKeys);
|
||||||
|
|
||||||
if (diffExpanded.key !== null) {
|
if (diffExpanded.key !== null) {
|
||||||
const { virtual, height, itemHeight } = props;
|
const { virtual, height, itemHeight } = props;
|
||||||
if (diffExpanded.add) {
|
if (diffExpanded.add) {
|
||||||
const keyIndex = prevData.findIndex(({ data: { key } }) => key === diffExpanded.key);
|
const keyIndex = prevData.findIndex(({ key }) => key === diffExpanded.key);
|
||||||
|
|
||||||
const rangeNodes = getMinimumRangeTransitionRange(
|
const rangeNodes = getMinimumRangeTransitionRange(
|
||||||
getExpandRange(prevData, data, diffExpanded.key),
|
getExpandRange(prevData, data, diffExpanded.key),
|
||||||
virtual,
|
virtual,
|
||||||
|
@ -141,7 +135,7 @@ export default defineComponent({
|
||||||
transitionRange.value = rangeNodes;
|
transitionRange.value = rangeNodes;
|
||||||
motionType.value = 'show';
|
motionType.value = 'show';
|
||||||
} else {
|
} else {
|
||||||
const keyIndex = data.findIndex(({ data: { key } }) => key === diffExpanded.key);
|
const keyIndex = data.findIndex(({ key }) => key === diffExpanded.key);
|
||||||
|
|
||||||
const rangeNodes = getMinimumRangeTransitionRange(
|
const rangeNodes = getMinimumRangeTransitionRange(
|
||||||
getExpandRange(data, prevData, diffExpanded.key),
|
getExpandRange(data, prevData, diffExpanded.key),
|
||||||
|
@ -295,7 +289,7 @@ export default defineComponent({
|
||||||
{...restProps}
|
{...restProps}
|
||||||
{...treeNodeProps}
|
{...treeNodeProps}
|
||||||
title={title}
|
title={title}
|
||||||
active={!!activeItem && key === activeItem.data.key}
|
active={!!activeItem && key === activeItem.key}
|
||||||
pos={pos}
|
pos={pos}
|
||||||
data={treeNode.data}
|
data={treeNode.data}
|
||||||
isStart={isStart}
|
isStart={isStart}
|
||||||
|
|
|
@ -160,7 +160,6 @@ export default defineComponent({
|
||||||
const flattenNodes = computed(() => {
|
const flattenNodes = computed(() => {
|
||||||
return flattenTreeData(treeData.value, expandedKeys.value, fieldNames.value);
|
return flattenTreeData(treeData.value, expandedKeys.value, fieldNames.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ================ selectedKeys =================
|
// ================ selectedKeys =================
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.selectable) {
|
if (props.selectable) {
|
||||||
|
@ -499,10 +498,9 @@ export default defineComponent({
|
||||||
cleanDragState();
|
cleanDragState();
|
||||||
|
|
||||||
if (dropTargetKey === null) return;
|
if (dropTargetKey === null) return;
|
||||||
|
|
||||||
const abstractDropNodeProps = {
|
const abstractDropNodeProps = {
|
||||||
...getTreeNodeProps(dropTargetKey, treeNodeRequiredProps.value),
|
...getTreeNodeProps(dropTargetKey, treeNodeRequiredProps.value),
|
||||||
active: activeItem.value?.data.key === dropTargetKey,
|
active: activeItem.value?.key === dropTargetKey,
|
||||||
data: keyEntities.value[dropTargetKey].node,
|
data: keyEntities.value[dropTargetKey].node,
|
||||||
};
|
};
|
||||||
const dropToChild = dragChildrenKeys.indexOf(dropTargetKey) !== -1;
|
const dropToChild = dragChildrenKeys.indexOf(dropTargetKey) !== -1;
|
||||||
|
@ -663,7 +661,7 @@ export default defineComponent({
|
||||||
new Promise<void>((resolve, reject) => {
|
new Promise<void>((resolve, reject) => {
|
||||||
// We need to get the latest state of loading/loaded keys
|
// We need to get the latest state of loading/loaded keys
|
||||||
const { loadData, onLoad } = props;
|
const { loadData, onLoad } = props;
|
||||||
const { key } = treeNode;
|
const key = treeNode[fieldNames.value.key];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!loadData ||
|
!loadData ||
|
||||||
|
@ -836,11 +834,11 @@ export default defineComponent({
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return flattenNodes.value.find(({ data: { key } }) => key === activeKey.value) || null;
|
return flattenNodes.value.find(({ key }) => key === activeKey.value) || null;
|
||||||
});
|
});
|
||||||
|
|
||||||
const offsetActiveKey = (offset: number) => {
|
const offsetActiveKey = (offset: number) => {
|
||||||
let index = flattenNodes.value.findIndex(({ data: { key } }) => key === activeKey.value);
|
let index = flattenNodes.value.findIndex(({ key }) => key === activeKey.value);
|
||||||
|
|
||||||
// Align with index
|
// Align with index
|
||||||
if (index === -1 && offset < 0) {
|
if (index === -1 && offset < 0) {
|
||||||
|
@ -851,7 +849,7 @@ export default defineComponent({
|
||||||
|
|
||||||
const item = flattenNodes.value[index];
|
const item = flattenNodes.value[index];
|
||||||
if (item) {
|
if (item) {
|
||||||
const { key } = item.data;
|
const { key } = item;
|
||||||
onActiveChange(key);
|
onActiveChange(key);
|
||||||
} else {
|
} else {
|
||||||
onActiveChange(null);
|
onActiveChange(null);
|
||||||
|
@ -894,7 +892,7 @@ export default defineComponent({
|
||||||
if (expandable && expandedKeys.value.includes(activeKey.value)) {
|
if (expandable && expandedKeys.value.includes(activeKey.value)) {
|
||||||
onNodeExpand({} as MouseEvent, eventNode);
|
onNodeExpand({} as MouseEvent, eventNode);
|
||||||
} else if (item.parent) {
|
} else if (item.parent) {
|
||||||
onActiveChange(item.parent.data.key);
|
onActiveChange(item.parent.key);
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
|
@ -904,7 +902,7 @@ export default defineComponent({
|
||||||
if (expandable && !expandedKeys.value.includes(activeKey.value)) {
|
if (expandable && !expandedKeys.value.includes(activeKey.value)) {
|
||||||
onNodeExpand({} as MouseEvent, eventNode);
|
onNodeExpand({} as MouseEvent, eventNode);
|
||||||
} else if (item.children && item.children.length) {
|
} else if (item.children && item.children.length) {
|
||||||
onActiveChange(item.children[0].data.key);
|
onActiveChange(item.children[0].key);
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -117,6 +117,7 @@ export default defineComponent({
|
||||||
isLeaf: isLeaf.value,
|
isLeaf: isLeaf.value,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
const instance = getCurrentInstance();
|
||||||
const eventData = computed(() => {
|
const eventData = computed(() => {
|
||||||
return convertNodePropsToEventData(props);
|
return convertNodePropsToEventData(props);
|
||||||
});
|
});
|
||||||
|
@ -125,7 +126,7 @@ export default defineComponent({
|
||||||
eventKey: computed(() => props.eventKey),
|
eventKey: computed(() => props.eventKey),
|
||||||
selectHandle,
|
selectHandle,
|
||||||
pos: computed(() => props.pos),
|
pos: computed(() => props.pos),
|
||||||
key: getCurrentInstance().vnode.key as Key,
|
key: instance.vnode.key as Key,
|
||||||
});
|
});
|
||||||
expose(dragNodeEvent);
|
expose(dragNodeEvent);
|
||||||
const onSelectorDoubleClick = (e: MouseEvent) => {
|
const onSelectorDoubleClick = (e: MouseEvent) => {
|
||||||
|
|
|
@ -113,10 +113,10 @@ export function calcDropPosition(
|
||||||
if (clientY < top + height / 2) {
|
if (clientY < top + height / 2) {
|
||||||
// first half, set abstract drop node to previous node
|
// first half, set abstract drop node to previous node
|
||||||
const nodeIndex = flattenedNodes.findIndex(
|
const nodeIndex = flattenedNodes.findIndex(
|
||||||
flattenedNode => flattenedNode.data.key === abstractDropNodeEntity.key,
|
flattenedNode => flattenedNode.key === abstractDropNodeEntity.key,
|
||||||
);
|
);
|
||||||
const prevNodeIndex = nodeIndex <= 0 ? 0 : nodeIndex - 1;
|
const prevNodeIndex = nodeIndex <= 0 ? 0 : nodeIndex - 1;
|
||||||
const prevNodeKey = flattenedNodes[prevNodeIndex].data.key;
|
const prevNodeKey = flattenedNodes[prevNodeIndex].key;
|
||||||
abstractDropNodeEntity = keyEntities[prevNodeKey];
|
abstractDropNodeEntity = keyEntities[prevNodeKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,12 +33,12 @@ export function findExpandedKeys(prev: Key[] = [], next: Key[] = []) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getExpandRange(shorter: FlattenNode[], longer: FlattenNode[], key: Key) {
|
export function getExpandRange(shorter: FlattenNode[], longer: FlattenNode[], key: Key) {
|
||||||
const shorterStartIndex = shorter.findIndex(({ data }) => data.key === key);
|
const shorterStartIndex = shorter.findIndex(item => item.key === key);
|
||||||
const shorterEndNode = shorter[shorterStartIndex + 1];
|
const shorterEndNode = shorter[shorterStartIndex + 1];
|
||||||
const longerStartIndex = longer.findIndex(({ data }) => data.key === key);
|
const longerStartIndex = longer.findIndex(item => item.key === key);
|
||||||
|
|
||||||
if (shorterEndNode) {
|
if (shorterEndNode) {
|
||||||
const longerEndIndex = longer.findIndex(({ data }) => data.key === shorterEndNode.data.key);
|
const longerEndIndex = longer.findIndex(item => item.key === shorterEndNode.key);
|
||||||
return longer.slice(longerStartIndex + 1, longerEndIndex);
|
return longer.slice(longerStartIndex + 1, longerEndIndex);
|
||||||
}
|
}
|
||||||
return longer.slice(longerStartIndex + 1);
|
return longer.slice(longerStartIndex + 1);
|
||||||
|
|
|
@ -401,6 +401,7 @@ export function convertNodePropsToEventData(props: TreeNodeProps): EventDataNode
|
||||||
dragOverGapBottom,
|
dragOverGapBottom,
|
||||||
pos,
|
pos,
|
||||||
active,
|
active,
|
||||||
|
eventKey,
|
||||||
} = props;
|
} = props;
|
||||||
const eventData = {
|
const eventData = {
|
||||||
dataRef: data,
|
dataRef: data,
|
||||||
|
@ -416,7 +417,7 @@ export function convertNodePropsToEventData(props: TreeNodeProps): EventDataNode
|
||||||
dragOverGapBottom,
|
dragOverGapBottom,
|
||||||
pos,
|
pos,
|
||||||
active,
|
active,
|
||||||
eventKey: data.key,
|
eventKey,
|
||||||
};
|
};
|
||||||
if (!('props' in eventData)) {
|
if (!('props' in eventData)) {
|
||||||
Object.defineProperty(eventData, 'props', {
|
Object.defineProperty(eventData, 'props', {
|
||||||
|
|
Loading…
Reference in New Issue