fix: tree fieldNames error #4726

pull/4738/head
tangjinzhou 2021-10-07 15:22:34 +08:00
parent 62c6f0e0d0
commit ac70da19f5
7 changed files with 28 additions and 30 deletions

View File

@ -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;

View File

@ -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}

View File

@ -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;

View File

@ -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) => {

View File

@ -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];
} }

View File

@ -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);

View File

@ -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', {