Browse Source

Clear persisted db on reset

pull/780/head
philon- 11 months ago
parent
commit
62a295e9db
  1. 6
      packages/web/src/components/CommandPalette/index.tsx
  2. 17
      packages/web/src/core/stores/index.ts
  3. 40
      packages/web/src/core/stores/nodeDBStore/index.ts
  4. 0
      packages/web/src/core/stores/utils/useDeviceContext.ts

6
packages/web/src/components/CommandPalette/index.tsx

@ -70,7 +70,7 @@ export const CommandPalette = () => {
} = useAppStore();
const { getDevices } = useDeviceStore();
const { setDialogOpen, connection } = useDevice();
const { getNode } = useNodeDB();
const { getNode, removeAllNodeErrors, removeAllNodes } = useNodeDB();
const { pinnedItems, togglePinnedItem } = usePinnedItems({
storageName: "pinnedCommandMenuGroups",
});
@ -199,6 +199,8 @@ export const CommandPalette = () => {
icon: TrashIcon,
action() {
connection?.resetNodes();
removeAllNodeErrors();
removeAllNodes(true);
},
},
{
@ -215,6 +217,8 @@ export const CommandPalette = () => {
icon: FactoryIcon,
action() {
connection?.factoryResetDevice();
removeAllNodeErrors();
removeAllNodes();
},
},
{

17
packages/web/src/core/stores/index.ts

@ -1,9 +1,13 @@
import { useDeviceContext } from "@app/core/stores/utils/useDeviceContext";
import { type Device, useDeviceStore } from "@core/stores/deviceStore";
import { type NodeDB, useNodeDBStore } from "@core/stores/nodeDBStore";
import { useDeviceContext } from "@core/stores/utils/deviceContext";
export {
CurrentDeviceContext,
type DeviceContext,
useDeviceContext,
} from "@app/core/stores/utils/useDeviceContext";
export { useAppStore } from "@core/stores/appStore";
export {
type Device,
type Page,
@ -11,27 +15,18 @@ export {
type ValidConfigType,
type ValidModuleConfigType,
} from "@core/stores/deviceStore";
export {
MessageState,
type MessageStore,
MessageType,
useMessageStore, // TODO: Bring hook into this file
} from "@core/stores/messageStore";
export { type NodeDB, useNodeDBStore } from "@core/stores/nodeDBStore";
export {
SidebarProvider,
useSidebar, // TODO: Bring hook into this file
} from "@core/stores/sidebarStore";
export {
CurrentDeviceContext,
type DeviceContext,
useDeviceContext,
} from "@core/stores/utils/deviceContext";
// Define hooks to access the stores
export const useNodeDB = (): NodeDB => {
const { deviceId } = useDeviceContext();

40
packages/web/src/core/stores/nodeDBStore/index.ts

@ -18,6 +18,7 @@ export interface NodeDB {
addNode: (nodeInfo: Protobuf.Mesh.NodeInfo) => void;
removeNode: (nodeNum: number) => void;
removeAllNodes: (keepMyNode?: boolean) => void;
processPacket: (data: ProcessPacketParams) => void;
addUser: (user: Types.PacketMetadata<Protobuf.Mesh.User>) => void;
addPosition: (position: Types.PacketMetadata<Protobuf.Mesh.Position>) => void;
@ -26,6 +27,7 @@ export interface NodeDB {
setNodeNum: (nodeNum: number) => void;
setNodeError: (nodeNum: number, error: NodeErrorType) => void;
clearNodeError: (nodeNum: number) => void;
removeAllNodeErrors: () => void;
getNodesLength: () => number;
getNode: (nodeNum: number) => Protobuf.Mesh.NodeInfo | undefined;
@ -98,6 +100,29 @@ function nodeDBFactory(
}),
),
removeAllNodes: (keepMyNode) =>
set(
produce<PrivateNodeDBState>((draft) => {
const nodeDB = draft.nodeDBs.get(id);
if (!nodeDB) {
throw new Error(`No nodeDB found (id: ${id})`);
}
const newNodeMap = new Map<number, Protobuf.Mesh.NodeInfo>();
if (
keepMyNode &&
nodeDB.myNodeNum !== undefined &&
nodeDB.nodeMap.has(nodeDB.myNodeNum)
) {
newNodeMap.set(
nodeDB.myNodeNum,
nodeDB.nodeMap.get(nodeDB.myNodeNum) ??
create(Protobuf.Mesh.NodeInfoSchema),
);
}
nodeDB.nodeMap = newNodeMap;
}),
),
setNodeError: (nodeNum, error) =>
set(
produce<PrivateNodeDBState>((draft) => {
@ -120,6 +145,17 @@ function nodeDBFactory(
}),
),
removeAllNodeErrors: () =>
set(
produce<PrivateNodeDBState>((draft) => {
const nodeDB = draft.nodeDBs.get(id);
if (!nodeDB) {
throw new Error(`No nodeDB found (id: ${id})`);
}
nodeDB.nodeErrors = new Map<number, NodeError>();
}),
),
processPacket: (data) =>
set(
produce<PrivateNodeDBState>((draft) => {
@ -326,10 +362,10 @@ export const useNodeDBStore = createStore<PrivateNodeDBState>()(
return nodeDB;
},
removeNodeDB: (userId) => {
removeNodeDB: (id) => {
set(
produce<PrivateNodeDBState>((draft) => {
draft.nodeDBs.delete(userId);
draft.nodeDBs.delete(id);
}),
);
},

0
packages/web/src/core/stores/utils/deviceContext.ts → packages/web/src/core/stores/utils/useDeviceContext.ts

Loading…
Cancel
Save