]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
fix(nuxt): plugin injection on latest Nuxt 3 context (#1433)
authorLay <brownsugar.idv.tw@gmail.com>
Mon, 11 Jul 2022 13:28:47 +0000 (21:28 +0800)
committerGitHub <noreply@github.com>
Mon, 11 Jul 2022 13:28:47 +0000 (15:28 +0200)
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com>
packages/nuxt/src/templates/plugin.ts

index c523f9b79ae45e0d7a40ae5374970fe14e1c47ce..c92b5eeaa04e659981b19b08f32be438d205b62e 100644 (file)
@@ -22,7 +22,12 @@ const PiniaNuxtPlugin: Plugin = (context, inject) => {
   // make sure to inject pinia after installing the plugin because in Nuxt 3, inject defines a non configurable getter
   // on app.config.globalProperties
   // add $pinia to the context
-  inject('pinia', pinia)
+  if (isVue2) {
+    inject('pinia', pinia)
+  } else {
+    // @ts-expect-error: vue 3 only
+    context.provide('pinia', pinia)
+  }
   // to allow accessing pinia without the $
   // TODO: remove this in deprecation
   context.pinia = pinia
@@ -43,10 +48,14 @@ const PiniaNuxtPlugin: Plugin = (context, inject) => {
       })
     } else {
       // there is no beforeNuxtRender in Nuxt 3
-      context.nuxtState.pinia = pinia.state.value
+      // @ts-expect-error: vue 3 only
+      context.ssrContext.payload.pinia = pinia.state.value
+    }
+  } else {
+    const source = isVue2 ? context.nuxtState : context.payload
+    if (source && source.pinia) {
+      pinia.state.value = source.pinia
     }
-  } else if (context.nuxtState && context.nuxtState.pinia) {
-    pinia.state.value = context.nuxtState.pinia
   }
 }