= ({
};
};
- const bgColor = getColorFromText(text ?? "UNK");
+ const safeText = text?.toString().toUpperCase() ?? "UNK";
+ const bgColor = getColorFromText(safeText);
const isLight = ColorUtils.isLight(bgColor);
const textColor = isLight ? "#000000" : "#FFFFFF";
- const initials = text?.toUpperCase().slice(0, 4) ?? "UNK";
+ const initials = safeText.slice(0, 4) ?? "UNK";
return (
((set, get) => ({
unsafeRoles: false,
refreshKeys: false,
rebootOTA: false,
- clearMessages: false,
+ deleteMessages: false,
},
pendingSettingsChanges: false,
messageDraft: "",
diff --git a/src/core/stores/messageStore.test.ts b/src/core/stores/messageStore.test.ts
index a8dc9880..ec3e1e59 100644
--- a/src/core/stores/messageStore.test.ts
+++ b/src/core/stores/messageStore.test.ts
@@ -286,8 +286,8 @@ describe('useMessageStore', () => {
const messageIdToDelete = directMessageToOther1.messageId;
useMessageStore.getState().clearMessageByMessageId({
type: MessageType.Direct,
- sender: myNodeNum,
- recipient: otherNodeNum1,
+ from: myNodeNum,
+ to: otherNodeNum1,
messageId: messageIdToDelete
});
const state = useMessageStore.getState();
@@ -300,8 +300,8 @@ describe('useMessageStore', () => {
const messageIdToDelete = directMessageFromOther1.messageId;
useMessageStore.getState().clearMessageByMessageId({
type: MessageType.Direct,
- sender: otherNodeNum1,
- recipient: myNodeNum,
+ from: otherNodeNum1,
+ to: myNodeNum,
messageId: messageIdToDelete
});
const state = useMessageStore.getState();
@@ -321,8 +321,8 @@ describe('useMessageStore', () => {
expect(state.messages.broadcast[broadcastChannel]?.[messageIdToDelete]).toBeUndefined();
});
- it('should clean up empty recipient/sender/channel objects', () => {
- useMessageStore.getState().clearMessageByMessageId({ type: MessageType.Direct, sender: otherNodeNum1, recipient: myNodeNum, messageId: directMessageFromOther1.messageId });
+ it('should clean up empty to/from/channel objects', () => {
+ useMessageStore.getState().clearMessageByMessageId({ type: MessageType.Direct, from: otherNodeNum1, to: myNodeNum, messageId: directMessageFromOther1.messageId });
expect(useMessageStore.getState().messages.direct[otherNodeNum1]?.[myNodeNum]).toBeUndefined(); // Recipient level removed
expect(useMessageStore.getState().messages.direct[otherNodeNum1]).toBeUndefined(); // Sender level removed
@@ -354,14 +354,14 @@ describe('useMessageStore', () => {
});
});
- describe('clearAllMessages', () => {
+ describe('deleteAllMessages', () => {
it('should clear all direct and broadcast messages', () => {
useMessageStore.getState().saveMessage(directMessageToOther1);
useMessageStore.getState().saveMessage(broadcastMessage1);
expect(Object.keys(useMessageStore.getState().messages.direct).length).toBeGreaterThan(0);
expect(Object.keys(useMessageStore.getState().messages.broadcast).length).toBeGreaterThan(0);
- useMessageStore.getState().clearAllMessages();
+ useMessageStore.getState().deleteAllMessages();
expect(useMessageStore.getState().messages.direct).toEqual({});
expect(useMessageStore.getState().messages.broadcast).toEqual({});
diff --git a/src/core/stores/messageStore.ts b/src/core/stores/messageStore.ts
index fdb9ad9c..b198e382 100644
--- a/src/core/stores/messageStore.ts
+++ b/src/core/stores/messageStore.ts
@@ -57,11 +57,11 @@ export interface MessageStore {
getMessages: (type: MessageType, options: { myNodeNum: number; otherNodeNum?: number; channel?: number }) => Message[];
getDraft: (key: Types.Destination) => string;
setDraft: (key: Types.Destination, message: string) => void;
- clearAllMessages: () => void;
+ deleteAllMessages: () => void;
clearMessageByMessageId: (params: {
type: MessageType;
- sender?: number;
- recipient?: number;
+ from?: number;
+ to?: number;
channel?: number;
messageId: number
}) => void;
@@ -177,7 +177,7 @@ export const useMessageStore = create()(
}
return [];
},
- clearMessageByMessageId: ({ type, sender, recipient, channel, messageId }) => {
+ clearMessageByMessageId: ({ type, from, to, channel, messageId }) => {
set(produce((state: MessageStore) => {
if (type === MessageType.Broadcast && channel !== undefined) {
const messageMap = state.messages.broadcast[channel];
@@ -187,14 +187,14 @@ export const useMessageStore = create()(
delete state.messages.broadcast[channel];
}
}
- } else if (type === MessageType.Direct && sender !== undefined && recipient !== undefined) {
- const messageMap = state.messages.direct?.[sender]?.[recipient];
+ } else if (type === MessageType.Direct && from !== undefined && to !== undefined) {
+ const messageMap = state.messages.direct?.[from]?.[to];
if (messageMap?.[messageId]) {
delete messageMap[messageId];
if (Object.keys(messageMap).length === 0) {
- delete state.messages.direct[sender][recipient];
- if (Object.keys(state.messages.direct[sender]).length === 0) {
- delete state.messages.direct[sender];
+ delete state.messages.direct[from][to];
+ if (Object.keys(state.messages.direct[from]).length === 0) {
+ delete state.messages.direct[from];
}
}
}
@@ -215,7 +215,7 @@ export const useMessageStore = create()(
state.draft.delete(key);
}));
},
- clearAllMessages: () => {
+ deleteAllMessages: () => {
set(produce((state: MessageStore) => {
state.messages.direct = {};
state.messages.broadcast = {};
diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx
index 70d33c60..30afe803 100644
--- a/src/pages/Messages.tsx
+++ b/src/pages/Messages.tsx
@@ -104,7 +104,7 @@ export const MessagesPage = () => {
-
+
({
+ get: vi.fn((key) => Promise.resolve(undefined)),
+ set: vi.fn((key, value) => Promise.resolve()),
+ del: vi.fn((key) => Promise.resolve()),
+ clear: vi.fn(() => Promise.resolve()),
+ keys: vi.fn(() => Promise.resolve([])),
+ createStore: vi.fn((dbName, storeName) => ({
+ })),
+}));
globalThis.ResizeObserver = class {
observe() { }
unobserve() { }