From: Eduardo San Martin Morote Date: Mon, 20 Jan 2020 18:08:52 +0000 (+0100) Subject: refactor: simplify state provider X-Git-Tag: 0.0.5~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5df90af7734a3b39cdec89c9dbc3798df0bb5f3;p=thirdparty%2Fvuejs%2Fpinia.git refactor: simplify state provider --- diff --git a/__tests__/store.spec.ts b/__tests__/store.spec.ts index a0570ed3..d8cf1afb 100644 --- a/__tests__/store.spec.ts +++ b/__tests__/store.spec.ts @@ -65,18 +65,15 @@ describe('Store', () => { }), }) - setStateProvider({ - set: () => {}, - get: () => ({ - main: { - a: false, - nested: { - foo: 'bar', - a: { b: 'string' }, - }, + setStateProvider(() => ({ + main: { + a: false, + nested: { + foo: 'bar', + a: { b: 'string' }, }, - }), - }) + }, + })) const store = useStore() diff --git a/nuxt/plugin.js b/nuxt/plugin.js index c27d5189..b7213151 100644 --- a/nuxt/plugin.js +++ b/nuxt/plugin.js @@ -1,52 +1,5 @@ import Vue from 'vue' import { setActiveReq, setStateProvider, getRootState } from 'pinia' -// import { Plugin } from '@nuxt/types' - -// declare module '@nuxt/types' { -// interface Context { -// ssrContext: { -// req: Parameters[0]['req'] -// nuxt: { -// __piniaStates?: Record -// } -// } -// } -// } - -// declare global { -// interface Window { -// __NUXT__: { -// __piniaStates: Record -// } -// } -// } - -const piniStatesGetter = () => window.__NUXT__.__piniaStates - -const noop = () => {} -const emptyObjectReturn = () => ({}) - -/** - * Create a state provider for nuxt - * @param {Parameters[0]['ssrContext'] | undefined} context - */ -function createStateProvider(context) { - /** - * - * @param {any} store - */ - const piniStatesSetter = store => { - // context is always non undefined on server - const { nuxt } = context - const states = nuxt.__piniaStates || (nuxt.__piniaStates = {}) - states[store.id] = store.state - } - - return { - get: process.client ? piniStatesGetter : emptyObjectReturn, - set: context ? piniStatesSetter : noop, - } -} Vue.mixin({ beforeCreate() { @@ -58,7 +11,7 @@ Vue.mixin({ if (context.ssrContext && context.ssrContext.req) { setActiveReq(context.ssrContext.req) } - // setStateProvider(createStateProvider(context.ssrContext)) + return setup(props, context) } } @@ -72,7 +25,7 @@ Vue.mixin({ const original = patchedServerPrefetch[i] patchedServerPrefetch[i] = function() { setActiveReq(this.$ssrContext.req) - // setStateProvider(createStateProvider(this.$ssrContext.req)) + return original.call(this) } } @@ -86,8 +39,6 @@ Vue.mixin({ /** @type {import('@nuxt/types').Plugin} */ const myPlugin = context => { // console.log('🍍 Pinia Nuxt plugin installed') - // setActiveReq(context.req) - // setStateProvider(createStateProvider(context.ssrContext)) if (process.server) { setActiveReq(context.req) @@ -95,11 +46,7 @@ const myPlugin = context => { nuxtState.pinia = getRootState(context.req) }) } else { - setStateProvider({ - get: () => context.nuxtState.pinia, - // TODO: remove the setter - set: () => {}, - }) + setStateProvider(() => context.nuxtState.pinia) } } diff --git a/src/rootStore.ts b/src/rootStore.ts index 23142455..09262a1e 100644 --- a/src/rootStore.ts +++ b/src/rootStore.ts @@ -24,8 +24,7 @@ export const storesMap = new WeakMap< * A state provider allows to set how states are stored for hydration. e.g. setting a property on a context, getting a property from window */ interface StateProvider { - get(): Record - set(store: GenericStore): any + (): Record } /** @@ -39,12 +38,7 @@ export function setStateProvider(stateProvider: StateProvider) { export function getInitialState(id: string): StateTree | undefined { const provider = stateProviders.get(getActiveReq()) - return provider && provider.get()[id] -} - -export function setInitialState(store: GenericStore): void { - const provider = stateProviders.get(getActiveReq()) - if (provider) provider.set(store) + return provider && provider()[id] } /** diff --git a/src/store.ts b/src/store.ts index 7781332e..51c64134 100644 --- a/src/store.ts +++ b/src/store.ts @@ -17,7 +17,6 @@ import { setActiveReq, storesMap, getInitialState, - setInitialState, } from './rootStore' const isClient = typeof window != 'undefined'