]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
fix(devtools): preserve store reactivity
authorEduardo San Martin Morote <posva13@gmail.com>
Wed, 26 Jul 2023 14:37:31 +0000 (16:37 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Wed, 26 Jul 2023 14:37:35 +0000 (16:37 +0200)
packages/pinia/src/devtools/actions.ts

index 8228d70339eaa1fa390da1a48cfd87b386429cdc..f28d8a03062baba1875020d24fe6f24496b2254e 100644 (file)
@@ -47,10 +47,7 @@ export async function actionGlobalCopyState(pinia: Pinia) {
 export async function actionGlobalPasteState(pinia: Pinia) {
   if (checkClipboardAccess()) return
   try {
-    Object.assign(
-      pinia.state.value,
-      JSON.parse(await navigator.clipboard.readText())
-    )
+    loadStoresState(pinia, JSON.parse(await navigator.clipboard.readText()))
     toastMessage('Global state pasted from clipboard.')
   } catch (error) {
     if (checkNotFocusedError(error)) return
@@ -111,7 +108,7 @@ export async function actionGlobalOpenStateFile(pinia: Pinia) {
     const result = await open()
     if (!result) return
     const { text, file } = result
-    Object.assign(pinia.state.value, JSON.parse(text))
+    loadStoresState(pinia, JSON.parse(text))
     toastMessage(`Global state imported from "${file.name}".`)
   } catch (error) {
     toastMessage(
@@ -121,3 +118,12 @@ export async function actionGlobalOpenStateFile(pinia: Pinia) {
     console.error(error)
   }
 }
+
+function loadStoresState(pinia: Pinia, state: Record<string, unknown>) {
+  for (const key in state) {
+    const storeState = pinia.state.value[key]
+    if (storeState) {
+      Object.assign(storeState, state[key])
+    }
+  }
+}