From 01f40318124ad1e6e09b1f0572f623900192ba9d Mon Sep 17 00:00:00 2001 From: MAZE Date: Fri, 27 Oct 2023 12:49:03 +0330 Subject: [PATCH] feat: add deep merge to Zustand Persist --- .eslintrc.json | 1 + package-lock.json | 9 +++++++++ package.json | 1 + src/store/sound/index.ts | 7 +++++++ 4 files changed, 18 insertions(+) diff --git a/.eslintrc.json b/.eslintrc.json index 0d96809..84dca71 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -40,6 +40,7 @@ ], "rules": { + "@typescript-eslint/ban-ts-comment": "off", "prettier/prettier": "error", "sort-keys-fix/sort-keys-fix": ["warn", "asc"], "sort-destructure-keys/sort-destructure-keys": "warn", diff --git a/package-lock.json b/package-lock.json index 845e42a..a948996 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@types/react": "^18.2.25", "@types/react-dom": "^18.2.10", "astro": "^3.2.3", + "deepmerge": "4.3.1", "framer-motion": "10.16.4", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -5730,6 +5731,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-browser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", diff --git a/package.json b/package.json index 67fb8e0..46bfa68 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@types/react": "^18.2.25", "@types/react-dom": "^18.2.10", "astro": "^3.2.3", + "deepmerge": "4.3.1", "framer-motion": "10.16.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/store/sound/index.ts b/src/store/sound/index.ts index b301dff..99da050 100644 --- a/src/store/sound/index.ts +++ b/src/store/sound/index.ts @@ -1,5 +1,6 @@ import { create } from 'zustand'; import { createJSONStorage, persist } from 'zustand/middleware'; +import merge from 'deepmerge'; import { type SoundState, createState } from './sound.state'; import { type SoundActions, createActions } from './sound.actions'; @@ -11,6 +12,12 @@ export const useSoundStore = create()( ...createActions(...a), }), { + merge: (persisted, current) => + merge( + current, + // @ts-ignore + persisted, + ), name: 'moodist-sounds', partialize: state => ({ sounds: state.sounds }), skipHydration: true,