fix(core): watcher not working with onMounted hook
Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import type { ToRefs } from 'vue'
|
import type { ToRefs, WatchStopHandle } from 'vue'
|
||||||
import type { WatchPausableReturn } from '@vueuse/core'
|
import type { WatchPausableReturn } from '@vueuse/core'
|
||||||
import { isFunction } from '@vueuse/core'
|
import { isFunction } from '@vueuse/core'
|
||||||
import type { Connection, FlowProps, VueFlowStore } from '~/types'
|
import type { Connection, FlowProps, VueFlowStore } from '~/types'
|
||||||
@@ -14,46 +14,42 @@ export const useWatch = (
|
|||||||
const watchModelValue = () => {
|
const watchModelValue = () => {
|
||||||
scope.run(() => {
|
scope.run(() => {
|
||||||
let pauseModel: WatchPausableReturn
|
let pauseModel: WatchPausableReturn
|
||||||
let pauseStore: WatchPausableReturn
|
let stopStore: WatchStopHandle
|
||||||
|
|
||||||
const immediate = !!(models.modelValue && models.modelValue.value)
|
const immediate = !!(models.modelValue && models.modelValue.value && models.modelValue.value.length)
|
||||||
|
|
||||||
// eslint-disable-next-line prefer-const
|
// eslint-disable-next-line prefer-const
|
||||||
pauseModel = watchPausable(
|
pauseModel = watchPausable(
|
||||||
[models.modelValue, () => models.modelValue?.value?.length],
|
[models.modelValue, () => models.modelValue?.value?.length],
|
||||||
([elements]) => {
|
([elements], _, onCleanup) => {
|
||||||
if (elements && Array.isArray(elements)) {
|
if (elements && Array.isArray(elements)) {
|
||||||
pauseStore?.pause()
|
|
||||||
|
|
||||||
store.setElements(elements)
|
store.setElements(elements)
|
||||||
|
|
||||||
nextTick(() => {
|
stopStore = watch(
|
||||||
pauseStore?.resume()
|
[store.nodes, store.edges, () => store.edges.value.length, () => store.nodes.value.length],
|
||||||
})
|
([nodes, edges]) => {
|
||||||
|
if (models.modelValue?.value && Array.isArray(models.modelValue.value)) {
|
||||||
|
pauseModel?.pause()
|
||||||
|
|
||||||
|
models.modelValue.value = [...nodes, ...edges]
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
pauseModel?.resume()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
onCleanup(stopStore)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate },
|
{ immediate },
|
||||||
)
|
)
|
||||||
|
|
||||||
pauseStore = watchPausable(
|
|
||||||
[store.nodes, store.edges, () => store.edges.value.length, () => store.nodes.value.length],
|
|
||||||
([nodes, edges]) => {
|
|
||||||
if (models.modelValue?.value && Array.isArray(models.modelValue.value)) {
|
|
||||||
pauseModel?.pause()
|
|
||||||
|
|
||||||
models.modelValue.value = [...nodes, ...edges]
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
pauseModel?.resume()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ immediate: !immediate },
|
|
||||||
)
|
|
||||||
|
|
||||||
onScopeDispose(() => {
|
onScopeDispose(() => {
|
||||||
pauseModel?.stop()
|
pauseModel?.stop()
|
||||||
pauseStore?.stop()
|
stopStore?.()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -61,46 +57,42 @@ export const useWatch = (
|
|||||||
const watchNodesValue = () => {
|
const watchNodesValue = () => {
|
||||||
scope.run(() => {
|
scope.run(() => {
|
||||||
let pauseModel: WatchPausableReturn
|
let pauseModel: WatchPausableReturn
|
||||||
let pauseStore: WatchPausableReturn
|
let stopStore: WatchStopHandle
|
||||||
|
|
||||||
const immediate = !!(models.nodes && models.nodes.value)
|
const immediate = !!(models.nodes && models.nodes.value && models.nodes.value.length)
|
||||||
|
|
||||||
// eslint-disable-next-line prefer-const
|
// eslint-disable-next-line prefer-const
|
||||||
pauseModel = watchPausable(
|
pauseModel = watchPausable(
|
||||||
[models.nodes, () => models.nodes?.value?.length],
|
[models.nodes, () => models.nodes?.value?.length],
|
||||||
([nodes]) => {
|
([nodes], _, onCleanup) => {
|
||||||
if (nodes && Array.isArray(nodes)) {
|
if (nodes && Array.isArray(nodes)) {
|
||||||
pauseStore?.pause()
|
|
||||||
|
|
||||||
store.setNodes(nodes)
|
store.setNodes(nodes)
|
||||||
|
|
||||||
nextTick(() => {
|
stopStore = watch(
|
||||||
pauseStore?.resume()
|
[store.nodes, () => store.nodes.value.length],
|
||||||
})
|
([nodes]) => {
|
||||||
|
if (models.nodes?.value && Array.isArray(models.nodes.value)) {
|
||||||
|
pauseModel?.pause()
|
||||||
|
|
||||||
|
models.nodes.value = [...nodes]
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
pauseModel?.resume()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
onCleanup(stopStore)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate },
|
{ immediate },
|
||||||
)
|
)
|
||||||
|
|
||||||
pauseStore = watchPausable(
|
|
||||||
[store.nodes, () => store.nodes.value.length],
|
|
||||||
([nodes]) => {
|
|
||||||
if (models.nodes?.value && Array.isArray(models.nodes.value)) {
|
|
||||||
pauseModel?.pause()
|
|
||||||
|
|
||||||
models.nodes.value = [...nodes]
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
pauseModel?.resume()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ immediate: !immediate },
|
|
||||||
)
|
|
||||||
|
|
||||||
onScopeDispose(() => {
|
onScopeDispose(() => {
|
||||||
pauseModel?.stop()
|
pauseModel?.stop()
|
||||||
pauseStore?.stop()
|
stopStore?.()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -108,46 +100,42 @@ export const useWatch = (
|
|||||||
const watchEdgesValue = () => {
|
const watchEdgesValue = () => {
|
||||||
scope.run(() => {
|
scope.run(() => {
|
||||||
let pauseModel: WatchPausableReturn
|
let pauseModel: WatchPausableReturn
|
||||||
let pauseStore: WatchPausableReturn
|
let stopStore: WatchStopHandle
|
||||||
|
|
||||||
const immediate = !!(models.edges && models.edges.value)
|
const immediate = !!(models.edges && models.edges.value && models.edges.value.length)
|
||||||
|
|
||||||
// eslint-disable-next-line prefer-const
|
// eslint-disable-next-line prefer-const
|
||||||
pauseModel = watchPausable(
|
pauseModel = watchPausable(
|
||||||
[models.edges, () => models.edges?.value?.length],
|
[models.edges, () => models.edges?.value?.length],
|
||||||
([edges]) => {
|
([edges], _, onCleanup) => {
|
||||||
if (edges && Array.isArray(edges)) {
|
if (edges && Array.isArray(edges)) {
|
||||||
pauseStore?.pause()
|
|
||||||
|
|
||||||
store.setEdges(edges)
|
store.setEdges(edges)
|
||||||
|
|
||||||
nextTick(() => {
|
stopStore = watch(
|
||||||
pauseStore?.resume()
|
[store.edges, () => store.edges.value.length],
|
||||||
})
|
([edges]) => {
|
||||||
|
if (models.edges?.value && Array.isArray(models.edges.value)) {
|
||||||
|
pauseModel?.pause()
|
||||||
|
|
||||||
|
models.edges.value = [...edges]
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
pauseModel?.resume()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: !immediate },
|
||||||
|
)
|
||||||
|
|
||||||
|
onCleanup(stopStore)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate },
|
{ immediate },
|
||||||
)
|
)
|
||||||
|
|
||||||
pauseStore = watchPausable(
|
|
||||||
[store.edges, () => store.edges.value.length],
|
|
||||||
([edges]) => {
|
|
||||||
if (models.edges?.value && Array.isArray(models.edges.value)) {
|
|
||||||
pauseModel?.pause()
|
|
||||||
|
|
||||||
models.edges.value = [...edges]
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
pauseModel?.resume()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ immediate: !immediate },
|
|
||||||
)
|
|
||||||
|
|
||||||
onScopeDispose(() => {
|
onScopeDispose(() => {
|
||||||
pauseModel?.stop()
|
pauseModel?.stop()
|
||||||
pauseStore?.stop()
|
stopStore?.()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user