import config from '@/core/configs'; import { MMKV } from 'react-native-mmkv'; import { initializeMMKVFlipper } from 'react-native-mmkv-flipper-plugin'; import { create, StateCreator } from 'zustand'; import { createJSONStorage, persist, PersistOptions, StateStorage } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; export const MMKVStorage = new MMKV(); if (__DEV__) initializeMMKVFlipper({ default: MMKVStorage }); export const persistStorage: StateStorage = { setItem: (name, value) => MMKVStorage.set(name, value), getItem: name => MMKVStorage.getString(name) ?? null, removeItem: name => MMKVStorage.delete(name), }; const createPersistOptions = ( name: string, additionalOptions?: Partial>, ): PersistOptions => ({ version: 1, name: `${config.appName}/${name}-storage`, storage: createJSONStorage(() => persistStorage), ...additionalOptions, }); export const createPersistenceStore = ( name: string, initializer: StateCreator, persistOptions?: Parameters>[1], ) => create()(persist(immer(initializer), createPersistOptions(name, persistOptions)));