blowater/UI/message-panel.test.tsx

76 lines
2.8 KiB
TypeScript
Raw Normal View History

2023-06-30 14:05:57 +00:00
/** @jsx h */
import { h, render } from "https://esm.sh/preact@10.17.1";
2023-06-30 14:05:57 +00:00
import { MessagePanel } from "./message-panel.tsx";
2023-09-11 15:27:38 +00:00
import { PrivateKey } from "../lib/nostr-ts/key.ts";
import { InMemoryAccountContext, NostrKind } from "../lib/nostr-ts/nostr.ts";
import { Database_Contextual_View } from "../database.ts";
import { testEventBus, testEventsAdapter } from "./_setup.test.ts";
import { prepareNormalNostrEvent } from "../lib/nostr-ts/event.ts";
import { getSocialPosts } from "../features/social.ts";
import { AllUsersInformation } from "./contact-list.ts";
import { EventSyncer } from "./event_syncer.ts";
import { ConnectionPool } from "../lib/nostr-ts/relay.ts";
import { ProfilesSyncer } from "../features/profile.ts";
import { handle_SendMessage } from "./app_update.tsx";
import { LamportTime } from "../time.ts";
import { initialModel } from "./app_model.ts";
import { relays } from "../lib/nostr-ts/relay-list.test.ts";
2023-09-11 15:27:38 +00:00
const ctx = InMemoryAccountContext.New(PrivateKey.Generate());
const database = await Database_Contextual_View.New(testEventsAdapter, ctx);
const lamport = new LamportTime(0);
2023-09-11 15:27:38 +00:00
await database.addEvent(await prepareNormalNostrEvent(ctx, NostrKind.TEXT_NOTE, [], `hi`));
await database.addEvent(await prepareNormalNostrEvent(ctx, NostrKind.TEXT_NOTE, [], `hi 2`));
await database.addEvent(await prepareNormalNostrEvent(ctx, NostrKind.TEXT_NOTE, [], `hi 3`));
const allUserInfo = new AllUsersInformation(ctx);
const pool = new ConnectionPool();
const model = initialModel();
pool.addRelayURL(relays[0]);
2023-06-30 14:05:57 +00:00
const view = () => {
const threads = getSocialPosts(database, allUserInfo.userInfos);
console.log(database.events, threads);
return (
<MessagePanel
allUserInfo={allUserInfo.userInfos}
db={database}
editorModel={model.social.editor}
eventSyncer={new EventSyncer(pool, database)}
focusedContent={undefined}
myPublicKey={ctx.publicKey}
profilesSyncer={new ProfilesSyncer(database, pool)}
eventEmitter={testEventBus}
messages={threads}
rightPanelModel={{
show: true,
}}
/>
);
};
2023-06-30 14:05:57 +00:00
render(view(), document.body);
for await (const e of testEventBus.onChange()) {
console.log(e);
if (e.type == "SendMessage") {
const err = await handle_SendMessage(
e,
ctx,
lamport,
pool,
model.editors,
model.social.editor,
model.social.replyEditors,
database,
);
if (err instanceof Error) {
console.error("update:SendMessage", err);
continue; // todo: global error toast
}
} else if (e.type == "UpdateMessageText") {
model.social.editor.text = e.text;
}
render(view(), document.body);
}