Skip to content

Commit c33e336

Browse files
committed
refactor: single pass
1 parent c734b6c commit c33e336

File tree

1 file changed

+27
-23
lines changed
  • packages/vuetify/src/composables/nested

1 file changed

+27
-23
lines changed

packages/vuetify/src/composables/nested/nested.ts

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -234,32 +234,36 @@ export const useNested = (props: NestedProps, items: Ref<ListItem[]>) => {
234234
parents.value = new Map(parents.value)
235235
}, 100)
236236

237-
function flatten (items: ListItem[]): ListItem[] {
238-
return [
239-
...items,
240-
...items.length ? flatten(items.flatMap(x => x.children ?? [])) : [],
241-
]
242-
}
243-
244237
watch(items, val => {
245238
if (props.itemsRegistration === 'render') return
246239

247-
const allNodes = flatten(val)
248-
children.value = new Map(
249-
allNodes
250-
.filter(item => item.children)
251-
.map(item => [item.value, item.children!.map(x => x.value)])
252-
)
253-
parents.value = new Map(
254-
allNodes
255-
.filter(item => !val.includes(item))
256-
.map(item => [item.value, allNodes.find(x => x.children?.includes(item))?.value])
257-
)
258-
disabled.value = new Set(
259-
allNodes
260-
.filter(item => (item as any).disabled)
261-
.map(item => item.value)
262-
)
240+
const _parents = new Map()
241+
const _children = new Map()
242+
const _disabled = new Set()
243+
244+
const stack = [...val]
245+
let i = 0
246+
while (i < stack.length) {
247+
const item = stack[i++]
248+
249+
if (item.children) {
250+
const childValues = []
251+
for (const child of item.children) {
252+
_parents.set(child.value, item.value)
253+
childValues.push(child.value)
254+
stack.push(child)
255+
}
256+
_children.set(item.value, childValues)
257+
}
258+
259+
if ((item as any).disabled) {
260+
_disabled.add(item.value)
261+
}
262+
}
263+
264+
children.value = _children
265+
parents.value = _parents
266+
disabled.value = _disabled
263267
}, { immediate: true })
264268

265269
const nested: NestedProvide = {

0 commit comments

Comments
 (0)