fix(core): only trigger store watcher immediately when els were set

Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
braks
2022-12-18 23:10:57 +01:00
committed by Braks
parent e603d42e89
commit f0a49414b7
+43 -31
View File
@@ -17,6 +17,7 @@ export const useWatch = (
let pauseStore: WatchPausableReturn let pauseStore: WatchPausableReturn
const immediate = !!(models.modelValue && models.modelValue.value) const immediate = !!(models.modelValue && models.modelValue.value)
let immediateStore = !!(store.nodes.value.length || store.edges.value.length)
// eslint-disable-next-line prefer-const // eslint-disable-next-line prefer-const
pauseModel = watchPausable( pauseModel = watchPausable(
@@ -27,7 +28,9 @@ export const useWatch = (
store.setElements(elements) store.setElements(elements)
pauseStore?.resume() // only trigger store watcher immediately if we actually set any elements to the store
if (!pauseStore && !immediateStore && elements.length) immediateStore = true
else pauseStore?.resume()
} }
}, },
{ immediate }, { immediate },
@@ -46,6 +49,7 @@ export const useWatch = (
}) })
} }
}, },
{ immediate: immediateStore },
) )
onScopeDispose(() => { onScopeDispose(() => {
@@ -61,6 +65,7 @@ export const useWatch = (
let pauseStore: WatchPausableReturn let pauseStore: WatchPausableReturn
const immediate = !!(models.nodes && models.nodes.value) const immediate = !!(models.nodes && models.nodes.value)
let immediateStore = !!store.nodes.value.length
// eslint-disable-next-line prefer-const // eslint-disable-next-line prefer-const
pauseModel = watchPausable( pauseModel = watchPausable(
@@ -71,23 +76,29 @@ export const useWatch = (
store.setNodes(nodes) store.setNodes(nodes)
pauseStore?.resume() // only trigger store watcher immediately if we actually set any elements to the store
if (!pauseStore && !immediateStore && nodes.length) immediateStore = true
else pauseStore?.resume()
} }
}, },
{ immediate }, { immediate },
) )
pauseStore = watchPausable([store.nodes, () => store.nodes.value.length], ([nodes]) => { pauseStore = watchPausable(
if (models.nodes?.value && Array.isArray(models.nodes.value)) { [store.nodes, () => store.nodes.value.length],
pauseModel?.pause() ([nodes]) => {
if (models.nodes?.value && Array.isArray(models.nodes.value)) {
pauseModel?.pause()
models.nodes.value = [...nodes] models.nodes.value = [...nodes]
nextTick(() => { nextTick(() => {
pauseModel?.resume() pauseModel?.resume()
}) })
} }
}) },
{ immediate: immediateStore },
)
onScopeDispose(() => { onScopeDispose(() => {
pauseModel?.stop() pauseModel?.stop()
@@ -102,6 +113,7 @@ export const useWatch = (
let pauseStore: WatchPausableReturn let pauseStore: WatchPausableReturn
const immediate = !!(models.edges && models.edges.value) const immediate = !!(models.edges && models.edges.value)
let immediateStore = !!store.edges.value.length
// eslint-disable-next-line prefer-const // eslint-disable-next-line prefer-const
pauseModel = watchPausable( pauseModel = watchPausable(
@@ -112,23 +124,29 @@ export const useWatch = (
store.setEdges(edges) store.setEdges(edges)
pauseStore?.resume() // only trigger store watcher immediately if we actually set any elements to the store
if (!pauseStore && !immediateStore && edges.length) immediateStore = true
else pauseStore?.resume()
} }
}, },
{ immediate }, { immediate },
) )
pauseStore = watchPausable([store.edges, () => store.edges.value.length], ([edges]) => { pauseStore = watchPausable(
if (models.edges?.value && Array.isArray(models.edges.value)) { [store.edges, () => store.edges.value.length],
pauseModel?.pause() ([edges]) => {
if (models.edges?.value && Array.isArray(models.edges.value)) {
pauseModel?.pause()
models.edges.value = [...edges] models.edges.value = [...edges]
nextTick(() => { nextTick(() => {
pauseModel?.resume() pauseModel?.resume()
}) })
} }
}) },
{ immediate: immediateStore },
)
onScopeDispose(() => { onScopeDispose(() => {
pauseModel?.stop() pauseModel?.stop()
@@ -146,7 +164,6 @@ export const useWatch = (
store.setMaxZoom(props.maxZoom) store.setMaxZoom(props.maxZoom)
} }
}, },
{ immediate: isDef(props.maxZoom) },
) )
}) })
} }
@@ -160,7 +177,6 @@ export const useWatch = (
store.setMinZoom(props.minZoom) store.setMinZoom(props.minZoom)
} }
}, },
{ immediate: isDef(props.minZoom) },
) )
}) })
} }
@@ -174,7 +190,6 @@ export const useWatch = (
store.setTranslateExtent(props.translateExtent) store.setTranslateExtent(props.translateExtent)
} }
}, },
{ immediate: isDef(props.translateExtent) },
) )
}) })
} }
@@ -188,7 +203,6 @@ export const useWatch = (
store.setNodeExtent(props.nodeExtent) store.setNodeExtent(props.nodeExtent)
} }
}, },
{ immediate: isDef(props.nodeExtent) },
) )
}) })
} }
@@ -202,7 +216,6 @@ export const useWatch = (
store.applyDefault.value = props.applyDefault store.applyDefault.value = props.applyDefault
} }
}, },
{ immediate: isDef(props.applyDefault) },
) )
watch( watch(
@@ -247,7 +260,6 @@ export const useWatch = (
store.autoConnect.value = props.autoConnect store.autoConnect.value = props.autoConnect
} }
}, },
{ immediate: isDef(props.autoConnect) },
) )
watch( watch(
@@ -290,12 +302,12 @@ export const useWatch = (
scope.run(() => { scope.run(() => {
watch( watch(
model, model,
() => { (nextValue) => {
if (isDef(model)) { if (isDef(nextValue)) {
storedValue.value = model.value storedValue.value = nextValue
} }
}, },
{ immediate: isDef(model) }, { flush: 'pre' },
) )
}) })
} }