From 74d4aad4dc2303a10424705c304253fe683cb150 Mon Sep 17 00:00:00 2001
From: Claas
Date: Mon, 8 Dec 2025 00:32:13 +0100
Subject: [PATCH] Start porting chat
---
app/src/routes/chat.jsx | 115 --------------------------------------
app/src/routes/chat.tsx | 121 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 121 insertions(+), 115 deletions(-)
delete mode 100644 app/src/routes/chat.jsx
create mode 100644 app/src/routes/chat.tsx
diff --git a/app/src/routes/chat.jsx b/app/src/routes/chat.jsx
deleted file mode 100644
index c53e132..0000000
--- a/app/src/routes/chat.jsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import { Navigate, useParams } from "@solidjs/router";
-import { createMemo, For, Show } from "solid-js";
-import { useAppContext } from "../components/AppContext";
-import { sendMessage } from "../sendMessage";
-/** @import { JSX } from "solid-js" */
-/** @import { Message } from "../components/AppContext" */
-
-// TODO take this inspiration https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fly7219l1-1.png?alt=media&token=67ff316b-7515-4e9f-9971-4e580290b1f2
-// from https://m3.material.io/foundations/layout/applying-layout/compact#283b4432-e3ee-46df-aa66-9ec87965c6ef
-export default function Chat() {
- const parameters = useParams();
-
- if (parameters.groupId === undefined) {
- return ;
- }
-
- const [app, setApp] = useAppContext();
- //TODO this will not work when group indices change due to change of ordering and new groups being added
- const groupIndex = createMemo(() =>
- app.groups.findIndex((group) => group.id === parameters.groupId)
- );
-
- if (groupIndex() < 0) {
- return (
- <>
- Chat not found
-
- This chat does not seem to exist Go back
-
- >
- );
- }
-
- const group = () => app.groups[groupIndex()];
-
- const messages = () => group().messages;
-
- /** @param {Parameters>[0]} event*/
- async function handleSend(event) {
- event.preventDefault();
- const messageText = /** @type {HTMLInputElement} */ (
- event.currentTarget.message
- ).value;
-
- event.currentTarget.reset();
-
- /** @type {Message} */
- const message = {
- sent: new Date(),
- text: messageText,
- };
-
- setApp("groups", groupIndex(), "messages", messages().length, message);
- await sendMessage({
- type: "sendMessage",
- groupId: group().id,
- friendId: group().friend.id,
- sent: new Date(),
- text: messageText,
- });
- }
-
- return (
- <>
- Back
- Chat
-
-
-
- | Group id |
- {parameters.groupId} |
-
-
- | Friend client id |
- {group().friend.id} |
-
-
- | Friend name |
- {group().friend.name} |
-
-
- | My client id |
- {app.id} |
-
-
- | My name |
- {app.name} |
-
-
-
- Messages
- 0} fallback={No messages
}>
-
-
- {(message) => (
- -
-
{message.text}
- {/*TODO format date correctly for datetime attribute*/}
-
-
- )}
-
-
-
-
- >
- );
-}
diff --git a/app/src/routes/chat.tsx b/app/src/routes/chat.tsx
new file mode 100644
index 0000000..bf008a7
--- /dev/null
+++ b/app/src/routes/chat.tsx
@@ -0,0 +1,121 @@
+import { Navigate, useParams } from "@solidjs/router";
+import { createResource, For, JSX, Show, Suspense } from "solid-js";
+import { getGroup } from "../database";
+
+// TODO take this inspiration https://firebasestorage.googleapis.com/v0/b/design-spec/o/projects%2Fgoogle-material-3%2Fimages%2Fly7219l1-1.png?alt=media&token=67ff316b-7515-4e9f-9971-4e580290b1f2
+// from https://m3.material.io/foundations/layout/applying-layout/compact#283b4432-e3ee-46df-aa66-9ec87965c6ef
+export default function Chat() {
+ const parameters = useParams();
+
+ if (parameters.groupId === undefined) {
+ return ;
+ }
+
+ const [group] = createResource(parameters.groupId, getGroup);
+
+ // if (groupIndex() < 0) {
+ // return (
+ // <>
+ // Chat not found
+ //
+ // This chat does not seem to exist Go back
+ //
+ // >
+ // );
+ // }
+
+ async function handleSend(
+ event: Parameters>[0]
+ ) {
+ // event.preventDefault();
+ // const messageText = /** @type {HTMLInputElement} */ (
+ // event.currentTarget.message
+ // ).value;
+ // event.currentTarget.reset();
+ // /** @type {Message} */
+ // const message = {
+ // sent: new Date(),
+ // text: messageText,
+ // };
+ // setApp("groups", groupIndex(), "messages", messages().length, message);
+ // await sendMessage({
+ // type: "sendMessage",
+ // groupId: group().id,
+ // friendId: group().friend.id,
+ // sent: new Date(),
+ // text: messageText,
+ // });
+ }
+
+ return (
+ <>
+ Loading chat
}>
+
+ Chat not found
+
+ This chat does not seem to exist Go back
+
+ >
+ }
+ >
+ {(group) => (
+ <>
+ Back
+ Chat
+
+
+
+ | Group id |
+ {parameters.groupId} |
+
+
+ | Friend client id |
+ {group().friend.id} |
+
+
+ | Friend name |
+ {group().friend.name} |
+
+
+ | My name |
+ {group().user?.name} |
+
+
+
+ Messages
+ 0}
+ fallback={No messages
}
+ >
+
+
+ {(message) => (
+ -
+
{message.text}
+ {/*TODO format date correctly for datetime attribute*/}
+
+
+ )}
+
+
+
+
+ >
+ )}
+
+
+ >
+ );
+}
--
2.51.2