From 3e6d2dae55416a888f50ed3b4d1c50af83827c1a Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Tue, 30 Aug 2022 10:55:16 -0400 Subject: [PATCH] initial state and splats --- src/Updux.js | 11 ++++++++--- src/initial.test.js | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Updux.js b/src/Updux.js index b0407d3..1a84745 100644 --- a/src/Updux.js +++ b/src/Updux.js @@ -24,7 +24,7 @@ export class Updux { constructor(config = {}) { this.#config = config; - this.#localInitial = config.initial ?? {}; + this.#localInitial = config.initial; this.#subduxes = config.subduxes ?? {}; this.#actions = R.mapValues(config.actions ?? {}, (arg, name) => @@ -73,11 +73,16 @@ export class Updux { } get initial() { - if (Object.keys(this.#subduxes).length === 0) return this.#localInitial; + if (Object.keys(this.#subduxes).length === 0) return this.#localInitial ?? {}; + + if( this.#subduxes['*'] ) { + if( this.#localInitial ) return this.#localInitial; + return []; + } return Object.assign( {}, - this.#localInitial, + this.#localInitial ?? {}, R.mapValues(this.#subduxes, ({ initial }) => initial), ); } diff --git a/src/initial.test.js b/src/initial.test.js index 88f11d5..abbfd50 100644 --- a/src/initial.test.js +++ b/src/initial.test.js @@ -25,3 +25,20 @@ test('initial value', () => { bar: 123, }); }); + +test( "splat initial", async () => { + const bar = new Updux({ + initial: { id: 0 }, + }); + + const foo = new Updux({ + subduxes: { '*': bar }, + }); + + expect(foo.initial).toEqual([]); + + expect( new Updux({ + initial: 'overriden', + subduxes: { '*': bar }, + }).initial ).toEqual('overriden'); +});