diff --git a/src/components/chat/Chat.svelte b/src/components/chat/Chat.svelte
index 3211771..60ba6f1 100644
--- a/src/components/chat/Chat.svelte
+++ b/src/components/chat/Chat.svelte
@@ -11,6 +11,7 @@
import { fly } from 'svelte/transition';
import { UserStore } from '@lib/user';
import type { Message, TextMessage } from '@lib/message';
+ import { onMount } from 'svelte';
let message: string;
let messagesDiv: HTMLDivElement = null;
@@ -43,6 +44,10 @@
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}, 500);
}
+
+ onMount(() => {
+ chatStore.newChat($jamStore.id);
+ });
- {#if $chatStore.length > 0}
- {#each $chatStore as message}
+ {#if $chatStore[$jamStore.id] && $chatStore[$jamStore.id].length > 0}
+ {#each $chatStore[$jamStore.id] as message}
{/each}
{:else}
diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts
index 379d5f0..7fff169 100644
--- a/src/lib/api/index.ts
+++ b/src/lib/api/index.ts
@@ -35,7 +35,7 @@ export const agent = {
list: async () => {
const {
data: { rooms },
- } = await api.get<{ rooms: JamRoom[]; }>('/jams');
+ } = await api.get<{ rooms: JamRoom[] }>('/jams');
return rooms;
},
diff --git a/src/lib/audio/mic.ts b/src/lib/audio/mic.ts
index 2b1b9cb..e72ce5e 100644
--- a/src/lib/audio/mic.ts
+++ b/src/lib/audio/mic.ts
@@ -84,7 +84,8 @@ export function noteFromPitch(
octaveLength = 12
): number | null {
const A4 = { freq: 440, midi: 69 };
- const noteNum = octaveLength * (Math.log(frequency / A4.freq) / Math.log(2));
+ const noteNum =
+ octaveLength * (Math.log(frequency / A4.freq) / Math.log(2));
const midiNote = Math.round(noteNum) + A4.midi;
if (midiNote < 0 || midiNote > 127) {
return null;
diff --git a/src/lib/audio/midi.ts b/src/lib/audio/midi.ts
index 50d206b..ea20bee 100644
--- a/src/lib/audio/midi.ts
+++ b/src/lib/audio/midi.ts
@@ -16,7 +16,7 @@ class Instrument {
}
// FIXME - _velocity defined but never used
- noteOn(note: number) {
+ noteOn(note: number, _velocity: number) {
this.player.play(note.toString());
}
}
diff --git a/src/lib/jam/chat.ts b/src/lib/jam/chat.ts
index bb07d28..66e47fa 100644
--- a/src/lib/jam/chat.ts
+++ b/src/lib/jam/chat.ts
@@ -1,19 +1,34 @@
import type { TextMessage } from '@lib/message';
import { createStorage } from '../storage';
-const createChatStorage = (init: TextMessage[] = []) => {
- const { subscribe, update } = createStorage(
- 'CHAT_STORE',
- init
- );
+interface ChatHistory {
+ [jamId: string]: TextMessage[];
+}
- function saveMessage(...message: TextMessage[]) {
+const createChatStorage = () => {
+ const { subscribe, update } = createStorage('CHAT_STORE', {});
+
+ function newChat(jamId: string) {
+ update(($storage) => {
+ if ($storage[jamId] === undefined) {
+ $storage[jamId] = []
+ }
+
+ return $storage
+ });
+ }
+
+ function saveMessage(jamId: string, ...message: TextMessage[]) {
update(($storage) => {
- return [...$storage, ...message];
+ if ($storage[jamId])
+ return {
+ ...$storage,
+ [jamId]: [...$storage[jamId], ...message],
+ };
});
}
- return { subscribe, saveMessage };
+ return { subscribe, newChat, saveMessage };
};
export const chatStore = createChatStorage();
diff --git a/src/lib/theme.ts b/src/lib/theme.ts
index 20e7486..f199748 100644
--- a/src/lib/theme.ts
+++ b/src/lib/theme.ts
@@ -100,5 +100,8 @@ export const switchTheme = (name: ThemeName) => {
};
export const applyTheme = (theme: Theme) => {
- return Object.entries(theme.vars).reduce((rules, [prop, val]) => `${rules}${prop}:${val};`, '');
+ return Object.entries(theme.vars).reduce(
+ (rules, [prop, val]) => `${rules}${prop}:${val};`,
+ ''
+ );
};
diff --git a/src/pages/Jam.svelte b/src/pages/Jam.svelte
index 1094c2d..ee1f78c 100644
--- a/src/pages/Jam.svelte
+++ b/src/pages/Jam.svelte
@@ -118,7 +118,8 @@
// TODO -- this can be done at the variable declaration level
// easier to track
// FIXME - webkitAudioContext doesn't exist in type `Window` (d.ts file needed)
- audioContext = new (window.AudioContext || window.webkitAudioContext)({
+ audioContext = new (window.AudioContext ||
+ globalThis.webkitAudioContext)({
latencyHint: 'interactive',
});
try {
@@ -161,7 +162,10 @@
displayMsg.displayName = 'You';
}
- chatStore.saveMessage({ ...message, payload: displayMsg });
+ chatStore.saveMessage($jamStore.id, {
+ ...message,
+ payload: displayMsg,
+ });
break;
}
case 'midi': {