improve mailboxes

This commit is contained in:
marlon-erler
2024-07-08 23:34:16 +02:00
parent 93658124cc
commit a8186e79be
13 changed files with 260 additions and 187 deletions
+18 -3
View File
@@ -1,9 +1,11 @@
import * as React from "bloatless-react";
import {
deleteMailbox,
isDisconnected,
isMailboxDisonnected,
isMessageEmpty,
lastReceivedMessage,
mailboxId,
newMessageBody,
newMessageChannel,
requestMailbox,
@@ -33,12 +35,25 @@ export function MainScreen() {
<div class="tile width-input">
<div>
<b>{getText("mailbox")}</b>
<p class="secondary" subscribe:innerText={mailboxId}></p>
<p class="secondary" toggle:hidden={isMailboxDisonnected}>
{getText("mailboxConnected")}
</p>
</div>
</div>
<div class="flex-row width-input justify-end">
<button class="primary width-100" on:click={requestMailbox}>
<button
class="danger width-50"
on:click={deleteMailbox}
toggle:disabled={isMailboxDisonnected}
>
{getText("deleteMailbox")}
</button>
<button
class="primary width-50"
on:click={requestMailbox}
toggle:disabled={isDisconnected}
>
{getText("requestMailbox")}
<span class="icon">inbox</span>
</button>
+54 -36
View File
@@ -9,45 +9,11 @@ export class Message implements React.Identifiable {
constructor(public channel: string, public body: string) {}
}
// UDN Frontend
const UDN = new UDNFrontend();
UDN.onconnect = () => {
isDisconnected.value = false;
updateStats();
if (mailboxId.value != "") {
UDN.accessMailbox(mailboxId.value);
}
};
UDN.onmessage = (data) => {
lastReceivedMessage.value = JSON.stringify(data, null, 4);
const { messageChannel, messageBody } = data;
if (messageChannel && messageBody) {
const messageObject = new Message(messageChannel, messageBody);
if (messageBody) messages.add(messageObject);
}
};
UDN.onmailbox = (id) => {
mailboxId.value = id;
};
UDN.ondisconnect = () => {
isDisconnected.value = true;
setTimeout(connect, 2000);
};
function connect() {
UDN.connect(`wss://${window.location.host}`);
}
connect();
// STATE
// connection
export const isDisconnected = new React.State(true);
export const mailboxId = React.restoreState("mailbox-id", "");
export const storedMailboxId = React.restoreState("mailbox-id", "");
export const isMailboxDisonnected = new React.State(true);
// messages
export const messages = new React.ListState<Message>();
@@ -87,6 +53,52 @@ export const isMessageEmpty = React.createProxyState(
() => newMessageChannel.value == "" || newMessageBody.value == ""
);
// UDN Frontend
const UDN = new UDNFrontend();
UDN.onconnect = () => {
isDisconnected.value = false;
updateStats();
if (storedMailboxId.value != "") {
UDN.connectMailbox(storedMailboxId.value);
}
};
UDN.onmessage = (data) => {
lastReceivedMessage.value = JSON.stringify(data, null, 4);
const { messageChannel, messageBody } = data;
if (messageChannel && messageBody) {
const messageObject = new Message(messageChannel, messageBody);
if (messageBody) messages.add(messageObject);
}
};
UDN.onmailbox = (id) => {
console.log(id);
storedMailboxId.value = id;
UDN.connectMailbox(id);
};
UDN.onmailboxconnect = (id) => {
console.log(id);
isMailboxDisonnected.value = false;
};
UDN.ondisconnect = () => {
isDisconnected.value = true;
isMailboxDisonnected.value = true;
setTimeout(connect, 1000);
};
function connect() {
UDN.connect(
`${window.location.protocol.replace("http", "ws")}//${window.location.host}`
);
}
connect();
// METHODS
export function subscribe() {
UDN.subscribe(subscriptionChannel.value);
@@ -103,5 +115,11 @@ export function sendMessage() {
}
export function requestMailbox() {
deleteMailbox();
UDN.requestMailbox();
}
export function deleteMailbox() {
console.log("test");
UDN.deleteMailbox(storedMailboxId.value);
}
+9 -3
View File
@@ -1,7 +1,9 @@
// STATIC
export const staticTextEnglish = {
mailbox: "Mailbox",
requestMailbox: "Request Mailbox",
requestMailbox: "Request",
deleteMailbox: "Delete",
mailboxConnected: "Mailbox connected",
channel: "Channel",
channel_placeholder: "my-channel",
disconnected: "Server disconnected",
@@ -26,7 +28,9 @@ export const translations: { [key: string]: typeof staticTextEnglish } = {
en: staticTextEnglish,
es: {
mailbox: "Buzón",
requestMailbox: "Solicitar buzón",
requestMailbox: "Solicitar",
deleteMailbox: "Eliminar",
mailboxConnected: "Buzón conectado",
channel: "Canal",
channel_placeholder: "mi-canal",
disconnected: "Sin coneción",
@@ -48,7 +52,9 @@ export const translations: { [key: string]: typeof staticTextEnglish } = {
},
de: {
mailbox: "Briefkasten",
requestMailbox: "Briefkasten beantragen",
requestMailbox: "Beantragen",
deleteMailbox: "Löschen",
mailboxConnected: "Briefkasten verbunden",
channel: "Kanal",
channel_placeholder: "mein-kanal",
disconnected: "Verbindung getrennt",