mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 16:23:41 +08:00 
			
		
		
		
	fix: hydrated
This commit is contained in:
		@@ -179,6 +179,8 @@ export const usePromptStore = createPersistStore(
 | 
			
		||||
            res.en.length + res.cn.length + res.tw.length;
 | 
			
		||||
          SearchService.init(allPromptsForSearch, userPrompts);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
      return () => state.setHasHydrated(true);
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,7 @@ class IndexedDBStorage implements StateStorage {
 | 
			
		||||
  public async getItem(name: string): Promise<string | null> {
 | 
			
		||||
    try {
 | 
			
		||||
      const value = (await get(name)) || localStorage.getItem(name);
 | 
			
		||||
      const _value = JSON.parse(value);
 | 
			
		||||
      if (_value?.state) {
 | 
			
		||||
        _value.state._hasHydrated = true;
 | 
			
		||||
      }
 | 
			
		||||
      return JSON.stringify(_value);
 | 
			
		||||
      return value;
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      return localStorage.getItem(name);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,11 @@ type SecondParam<T> = T extends (
 | 
			
		||||
 | 
			
		||||
type MakeUpdater<T> = {
 | 
			
		||||
  lastUpdateTime: number;
 | 
			
		||||
  _hasHydrated: boolean;
 | 
			
		||||
 | 
			
		||||
  markUpdate: () => void;
 | 
			
		||||
  update: Updater<T>;
 | 
			
		||||
  setHasHydrated: (state: boolean) => void;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
type SetStoreState<T> = (
 | 
			
		||||
@@ -33,12 +35,18 @@ export function createPersistStore<T extends object, M>(
 | 
			
		||||
  persistOptions: SecondParam<typeof persist<T & M & MakeUpdater<T>>>,
 | 
			
		||||
) {
 | 
			
		||||
  persistOptions.storage = createJSONStorage(() => indexedDBStorage);
 | 
			
		||||
  persistOptions.onRehydrateStorage = persistOptions.onRehydrateStorage
 | 
			
		||||
    ? persistOptions.onRehydrateStorage
 | 
			
		||||
    : (state) => {
 | 
			
		||||
        return () => state.setHasHydrated(true);
 | 
			
		||||
      };
 | 
			
		||||
  return create(
 | 
			
		||||
    persist(
 | 
			
		||||
      combine(
 | 
			
		||||
        {
 | 
			
		||||
          ...state,
 | 
			
		||||
          lastUpdateTime: 0,
 | 
			
		||||
          _hasHydrated: false,
 | 
			
		||||
        },
 | 
			
		||||
        (set, get) => {
 | 
			
		||||
          return {
 | 
			
		||||
@@ -57,6 +65,9 @@ export function createPersistStore<T extends object, M>(
 | 
			
		||||
                lastUpdateTime: Date.now(),
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
            setHasHydrated: (state: boolean) => {
 | 
			
		||||
              set({ _hasHydrated: state } as Partial<T & M & MakeUpdater<T>>);
 | 
			
		||||
            },
 | 
			
		||||
          } as M & MakeUpdater<T>;
 | 
			
		||||
        },
 | 
			
		||||
      ),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user