|
|
@ -1,13 +1,13 @@ |
|
|
import { create } from "@bufbuild/protobuf"; |
|
|
import { create } from "@bufbuild/protobuf"; |
|
|
|
|
|
import { featureFlags } from "@core/services/featureFlags"; |
|
|
import { createStorage } from "@core/stores/utils/indexDB.ts"; |
|
|
import { createStorage } from "@core/stores/utils/indexDB.ts"; |
|
|
import { Protobuf, type Types } from "@meshtastic/core"; |
|
|
import { Protobuf, type Types } from "@meshtastic/core"; |
|
|
import { produce } from "immer"; |
|
|
import { produce } from "immer"; |
|
|
import { create as createStore } from "zustand"; |
|
|
import { create as createStore, type StateCreator } from "zustand"; |
|
|
import { persist } from "zustand/middleware"; |
|
|
import { type PersistOptions, persist } from "zustand/middleware"; |
|
|
import type { NodeError, NodeErrorType, ProcessPacketParams } from "./types"; |
|
|
import type { NodeError, NodeErrorType, ProcessPacketParams } from "./types"; |
|
|
|
|
|
|
|
|
const CURRENT_STORE_VERSION = 0; |
|
|
const CURRENT_STORE_VERSION = 0; |
|
|
|
|
|
|
|
|
const NODEDB_RETENTION_NUM = 10; |
|
|
const NODEDB_RETENTION_NUM = 10; |
|
|
|
|
|
|
|
|
export interface NodeDB { |
|
|
export interface NodeDB { |
|
|
@ -334,9 +334,10 @@ function nodeDBFactory( |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export const useNodeDBStore = createStore<PrivateNodeDBState>()( |
|
|
export const nodeDBInitializer: StateCreator<PrivateNodeDBState> = ( |
|
|
persist( |
|
|
set, |
|
|
(set, get) => ({ |
|
|
get, |
|
|
|
|
|
) => ({ |
|
|
nodeDBs: new Map(), |
|
|
nodeDBs: new Map(), |
|
|
|
|
|
|
|
|
addNodeDB: (id) => { |
|
|
addNodeDB: (id) => { |
|
|
@ -371,8 +372,9 @@ export const useNodeDBStore = createStore<PrivateNodeDBState>()( |
|
|
}, |
|
|
}, |
|
|
getNodeDBs: () => Array.from(get().nodeDBs.values()), |
|
|
getNodeDBs: () => Array.from(get().nodeDBs.values()), |
|
|
getNodeDB: (id) => get().nodeDBs.get(id), |
|
|
getNodeDB: (id) => get().nodeDBs.get(id), |
|
|
}), |
|
|
}); |
|
|
{ |
|
|
|
|
|
|
|
|
const persistOptions: PersistOptions<PrivateNodeDBState, NodeDBPersisted> = { |
|
|
name: "meshtastic-nodedb-store", |
|
|
name: "meshtastic-nodedb-store", |
|
|
storage: createStorage<NodeDBPersisted>(), |
|
|
storage: createStorage<NodeDBPersisted>(), |
|
|
version: CURRENT_STORE_VERSION, |
|
|
version: CURRENT_STORE_VERSION, |
|
|
@ -423,6 +425,16 @@ export const useNodeDBStore = createStore<PrivateNodeDBState>()( |
|
|
}), |
|
|
}), |
|
|
); |
|
|
); |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}; |
|
|
), |
|
|
|
|
|
|
|
|
// Add persist middleware on the store if the feature flag is enabled
|
|
|
|
|
|
const persistNodes = featureFlags.get("persistNodeDB"); |
|
|
|
|
|
console.debug( |
|
|
|
|
|
`NodeDBStore: Persisting nodes is ${persistNodes ? "enabled" : "disabled"}`, |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
export const useNodeDBStore = persistNodes |
|
|
|
|
|
? createStore<PrivateNodeDBState, [["zustand/persist", NodeDBPersisted]]>( |
|
|
|
|
|
persist(nodeDBInitializer, persistOptions), |
|
|
|
|
|
) |
|
|
|
|
|
: createStore<PrivateNodeDBState>()(nodeDBInitializer); |
|
|
|