优化
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { computed, onBeforeUnmount, ref, watchEffect, type Ref } from 'vue'
|
||||
import { computed, onBeforeUnmount, ref, watch, type Ref } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
export interface UnsavedWorkEntry {
|
||||
@@ -23,7 +23,11 @@ export const useUnsavedWorkStore = defineStore('client-unsaved-work', () => {
|
||||
if (owner && owners.get(entry.key) !== owner) return
|
||||
const index = entries.value.findIndex((item) => item.key === entry.key)
|
||||
if (index === -1) entries.value.push(entry)
|
||||
else entries.value[index] = entry
|
||||
else {
|
||||
const current = entries.value[index]
|
||||
if (current.routeKey === entry.routeKey && current.label === entry.label && current.dirty === entry.dirty) return
|
||||
entries.value[index] = entry
|
||||
}
|
||||
}
|
||||
|
||||
function remove(key: string, owner?: symbol) {
|
||||
@@ -62,13 +66,13 @@ export function useUnsavedWorkRegistration(options: {
|
||||
const store = useUnsavedWorkStore()
|
||||
const owner = Symbol(options.key)
|
||||
store.claim(options.key, owner)
|
||||
watchEffect(() => {
|
||||
watch(options.dirty, (dirty) => {
|
||||
store.upsert({
|
||||
key: options.key,
|
||||
routeKey: options.routeKey,
|
||||
label: options.label,
|
||||
dirty: options.dirty.value,
|
||||
dirty,
|
||||
}, owner)
|
||||
})
|
||||
}, { immediate: true })
|
||||
onBeforeUnmount(() => store.remove(options.key, owner))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user