diff --git a/packages/pinia/src/devtools/actions.ts b/packages/pinia/src/devtools/actions.ts index 8228d70339..f28d8a0306 100644 --- a/packages/pinia/src/devtools/actions.ts +++ b/packages/pinia/src/devtools/actions.ts @@ -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) { + for (const key in state) { + const storeState = pinia.state.value[key] + if (storeState) { + Object.assign(storeState, state[key]) + } + } +}