=> {
- reset({ ...data });
- return Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Channel",
diff --git a/src/components/PageComponents/Config/Bluetooth.tsx b/src/components/PageComponents/Config/Bluetooth.tsx
index 7250fc41..3909bfcd 100644
--- a/src/components/PageComponents/Config/Bluetooth.tsx
+++ b/src/components/PageComponents/Config/Bluetooth.tsx
@@ -35,18 +35,16 @@ export const Bluetooth = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "bluetooth",
- bluetooth: data
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "bluetooth",
+ bluetooth: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Bluetooth Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/Device.tsx b/src/components/PageComponents/Config/Device.tsx
index 7ad664a3..fbadf56c 100644
--- a/src/components/PageComponents/Config/Device.tsx
+++ b/src/components/PageComponents/Config/Device.tsx
@@ -34,18 +34,16 @@ export const Device = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "device",
- device: data
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "device",
+ device: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Device Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/Display.tsx b/src/components/PageComponents/Config/Display.tsx
index 97a81a9c..916c9ed1 100644
--- a/src/components/PageComponents/Config/Display.tsx
+++ b/src/components/PageComponents/Config/Display.tsx
@@ -34,18 +34,16 @@ export const Display = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "display",
- display: data
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "display",
+ display: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Display Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/LoRa.tsx b/src/components/PageComponents/Config/LoRa.tsx
index a1cf8e4c..252da69c 100644
--- a/src/components/PageComponents/Config/LoRa.tsx
+++ b/src/components/PageComponents/Config/LoRa.tsx
@@ -42,18 +42,16 @@ export const LoRa = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "lora",
- lora: data
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "lora",
+ lora: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved LoRa Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/Network.tsx b/src/components/PageComponents/Config/Network.tsx
index be9297bc..c07bae22 100644
--- a/src/components/PageComponents/Config/Network.tsx
+++ b/src/components/PageComponents/Config/Network.tsx
@@ -63,13 +63,9 @@ export const Network = (): JSX.Element => {
oneofKind: "network",
network: Protobuf.Config_NetworkConfig.create(data)
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
}
})
- .catch((e) => console.log(e)),
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Network Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/Position.tsx b/src/components/PageComponents/Config/Position.tsx
index 5fee0256..6f2917e9 100644
--- a/src/components/PageComponents/Config/Position.tsx
+++ b/src/components/PageComponents/Config/Position.tsx
@@ -60,17 +60,15 @@ export const Position = (): JSX.Element => {
if (connection) {
void toast.promise(
- connection.setPosition({
- position: Protobuf.Position.create({
- altitude: fixedAlt,
- latitudeI: fixedLat * 1e7,
- longitudeI: fixedLng * 1e7
- }),
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ connection
+ .setPosition({
+ position: Protobuf.Position.create({
+ altitude: fixedAlt,
+ latitudeI: fixedLat * 1e7,
+ longitudeI: fixedLng * 1e7
+ })
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Position Config, Restarting Node",
@@ -79,18 +77,16 @@ export const Position = (): JSX.Element => {
);
if (configHasChanged) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "position",
- position: rest
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "position",
+ position: rest
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Position Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/Power.tsx b/src/components/PageComponents/Config/Power.tsx
index 8a859b67..4b1928e6 100644
--- a/src/components/PageComponents/Config/Power.tsx
+++ b/src/components/PageComponents/Config/Power.tsx
@@ -32,18 +32,16 @@ export const Power = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setConfig({
- config: {
- payloadVariant: {
- oneofKind: "power",
- power: data
+ connection
+ .setConfig({
+ config: {
+ payloadVariant: {
+ oneofKind: "power",
+ power: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Power Config, Restarting Node",
diff --git a/src/components/PageComponents/Config/User.tsx b/src/components/PageComponents/Config/User.tsx
index 2e421076..81e15fe6 100644
--- a/src/components/PageComponents/Config/User.tsx
+++ b/src/components/PageComponents/Config/User.tsx
@@ -42,13 +42,11 @@ export const User = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection && myNode?.data.user) {
void toast.promise(
- connection.setOwner({
- owner: { ...myNode.data.user, ...data },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ connection
+ .setOwner({
+ owner: { ...myNode.data.user, ...data }
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved User, Restarting Node",
diff --git a/src/components/PageComponents/Messages/Message.tsx b/src/components/PageComponents/Messages/Message.tsx
index 2a43a142..3b8857d2 100644
--- a/src/components/PageComponents/Messages/Message.tsx
+++ b/src/components/PageComponents/Messages/Message.tsx
@@ -31,17 +31,19 @@ export const Message = ({
return lastMsgSameUser ? (
- {message.ack ? (
+ {message.state === "ack" ? (
- ) : (
+ ) : message.state === "waiting" ? (
+ ) : (
+
)}
{"waypointID" in message ? (
) : (
{message.text}
@@ -69,17 +71,21 @@ export const Message = ({
{/* */}
- {message.ack ? (
+ {message.state === "ack" ? (
- ) : (
+ ) : message.state === "waiting" ? (
+ ) : (
+
)}
{"waypointID" in message ? (
) : (
{message.text}
diff --git a/src/components/PageComponents/Messages/MessageInput.tsx b/src/components/PageComponents/Messages/MessageInput.tsx
index f8ebea7d..f2864c27 100644
--- a/src/components/PageComponents/Messages/MessageInput.tsx
+++ b/src/components/PageComponents/Messages/MessageInput.tsx
@@ -14,7 +14,7 @@ export interface MessageInputProps {
}
export const MessageInput = ({ channel }: MessageInputProps): JSX.Element => {
- const { connection, ackMessage } = useDevice();
+ const { connection, setMessageState } = useDevice();
const { register, handleSubmit } = useForm<{
message: string;
@@ -24,16 +24,17 @@ export const MessageInput = ({ channel }: MessageInputProps): JSX.Element => {
}
});
- const onSubmit = handleSubmit((data) => {
- void connection?.sendText({
- text: data.message,
- wantAck: true,
- channel: channel.config.index as Types.ChannelNumber,
- callback: (id) => {
- ackMessage(channel.config.index, id);
- return Promise.resolve();
- }
- });
+ const onSubmit = handleSubmit(async (data) => {
+ await connection
+ ?.sendText({
+ text: data.message,
+ wantAck: true,
+ channel: channel.config.index as Types.ChannelNumber
+ })
+ .then((id) => setMessageState(channel.config.index, id, "ack"))
+ .catch((e: Types.PacketError) =>
+ setMessageState(channel.config.index, e.id, e.error)
+ );
});
return (
diff --git a/src/components/PageComponents/ModuleConfig/CannedMessage.tsx b/src/components/PageComponents/ModuleConfig/CannedMessage.tsx
index cd22a6b5..e033d2a1 100644
--- a/src/components/PageComponents/ModuleConfig/CannedMessage.tsx
+++ b/src/components/PageComponents/ModuleConfig/CannedMessage.tsx
@@ -40,18 +40,16 @@ export const CannedMessage = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "cannedMessage",
- cannedMessage: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "cannedMessage",
+ cannedMessage: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Canned Message Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx b/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx
index 9dff6f86..516eb7f3 100644
--- a/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx
+++ b/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx
@@ -30,18 +30,16 @@ export const ExternalNotification = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "externalNotification",
- externalNotification: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "externalNotification",
+ externalNotification: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved External Notification Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/MQTT.tsx b/src/components/PageComponents/ModuleConfig/MQTT.tsx
index 9df15873..435ee7f1 100644
--- a/src/components/PageComponents/ModuleConfig/MQTT.tsx
+++ b/src/components/PageComponents/ModuleConfig/MQTT.tsx
@@ -37,18 +37,16 @@ export const MQTT = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "mqtt",
- mqtt: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "mqtt",
+ mqtt: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved MQTT Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/RangeTest.tsx b/src/components/PageComponents/ModuleConfig/RangeTest.tsx
index 89773231..11664218 100644
--- a/src/components/PageComponents/ModuleConfig/RangeTest.tsx
+++ b/src/components/PageComponents/ModuleConfig/RangeTest.tsx
@@ -31,18 +31,16 @@ export const RangeTest = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "rangeTest",
- rangeTest: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "rangeTest",
+ rangeTest: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Range Test Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/Serial.tsx b/src/components/PageComponents/ModuleConfig/Serial.tsx
index 4a62e4f4..01aac75c 100644
--- a/src/components/PageComponents/ModuleConfig/Serial.tsx
+++ b/src/components/PageComponents/ModuleConfig/Serial.tsx
@@ -31,18 +31,16 @@ export const Serial = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "serial",
- serial: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "serial",
+ serial: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Serial Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/StoreForward.tsx b/src/components/PageComponents/ModuleConfig/StoreForward.tsx
index 2b5f9b77..e52e31ec 100644
--- a/src/components/PageComponents/ModuleConfig/StoreForward.tsx
+++ b/src/components/PageComponents/ModuleConfig/StoreForward.tsx
@@ -31,18 +31,16 @@ export const StoreForward = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "storeForward",
- storeForward: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "storeForward",
+ storeForward: data
+ }
}
- },
- callback: async () => {
- reset({ ...data });
- await Promise.resolve();
- }
- }),
+ })
+ .then(() => reset({ ...data })),
{
loading: "Saving...",
success: "Saved Store & Forward Config, Restarting Node",
diff --git a/src/components/PageComponents/ModuleConfig/Telemetry.tsx b/src/components/PageComponents/ModuleConfig/Telemetry.tsx
index 84147db9..cb9014cb 100644
--- a/src/components/PageComponents/ModuleConfig/Telemetry.tsx
+++ b/src/components/PageComponents/ModuleConfig/Telemetry.tsx
@@ -31,18 +31,19 @@ export const Telemetry = (): JSX.Element => {
const onSubmit = handleSubmit((data) => {
if (connection) {
void toast.promise(
- connection.setModuleConfig({
- moduleConfig: {
- payloadVariant: {
- oneofKind: "telemetry",
- telemetry: data
+ connection
+ .setModuleConfig({
+ moduleConfig: {
+ payloadVariant: {
+ oneofKind: "telemetry",
+ telemetry: data
+ }
}
- },
- callback: async () => {
+ })
+ .then(async () => {
reset({ ...data });
await Promise.resolve();
- }
- }),
+ }),
{
loading: "Saving...",
success: "Saved Telemetry Config, Restarting Node",
diff --git a/src/core/stores/deviceStore.ts b/src/core/stores/deviceStore.ts
index 09cd5f57..2a13348a 100644
--- a/src/core/stores/deviceStore.ts
+++ b/src/core/stores/deviceStore.ts
@@ -15,16 +15,19 @@ export type Page =
| "info"
| "logs";
-export interface MessageWithAck extends Types.MessagePacket {
- ack: boolean;
+export interface MessageWithState extends Types.MessagePacket {
+ state: MessageState;
}
-export interface WaypointIDWithAck extends Omit {
+export interface WaypointIDWithState
+ extends Omit {
waypointID: number;
- ack: boolean;
+ state: MessageState;
}
-export type AllMessageTypes = MessageWithAck | WaypointIDWithAck;
+export type AllMessageTypes = MessageWithState | WaypointIDWithState;
+
+export type MessageState = "ack" | "waiting" | Protobuf.Routing_Error;
export interface Channel {
config: Protobuf.Channel;
@@ -77,10 +80,14 @@ export interface Device {
addUser: (user: Types.UserPacket) => void;
addPosition: (position: Types.PositionPacket) => void;
addConnection: (connection: Types.ConnectionType) => void;
- addMessage: (message: MessageWithAck) => void;
- addWaypointMessage: (message: WaypointIDWithAck) => void;
+ addMessage: (message: MessageWithState) => void;
+ addWaypointMessage: (message: WaypointIDWithState) => void;
addDeviceMetadataMessage: (metadata: Types.DeviceMetadataPacket) => void;
- ackMessage: (channelIndex: number, messageId: number) => void;
+ setMessageState: (
+ channelIndex: number,
+ messageId: number,
+ state: MessageState
+ ) => void;
setImportDialogOpen: (open: boolean) => void;
setQRDialogOpen: (open: boolean) => void;
setShutdownDialogOpen: (open: boolean) => void;
@@ -517,7 +524,11 @@ export const useDeviceStore = create((set, get) => ({
})
);
},
- ackMessage: (channelIndex: number, messageId: number) => {
+ setMessageState: (
+ channelIndex: number,
+ messageId: number,
+ state: MessageState
+ ) => {
set(
produce((draft) => {
const device = draft.devices.get(id);
@@ -529,7 +540,7 @@ export const useDeviceStore = create((set, get) => ({
(msg) => msg.packet.id === messageId
);
if (message) {
- message.ack = true;
+ message.state = state;
}
})
);
diff --git a/src/core/subscriptions.ts b/src/core/subscriptions.ts
index 16fa478e..36964d59 100644
--- a/src/core/subscriptions.ts
+++ b/src/core/subscriptions.ts
@@ -65,7 +65,7 @@ export const subscribeAll = (
device.addWaypoint(data);
device.addWaypointMessage({
waypointID: data.id,
- ack: rest.packet.from !== myNodeNum,
+ state: rest.packet.from !== myNodeNum ? "ack" : "waiting",
...rest
});
});
@@ -107,7 +107,7 @@ export const subscribeAll = (
connection.events.onMessagePacket.subscribe((messagePacket) => {
device.addMessage({
...messagePacket,
- ack: messagePacket.packet.from !== myNodeNum
+ state: messagePacket.packet.from !== myNodeNum ? "ack" : "waiting"
});
});
diff --git a/vite.config.ts b/vite.config.ts
index 5cfc750e..a9e641b8 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -20,13 +20,13 @@ export default defineConfig({
react(),
EnvironmentPlugin({
COMMIT_HASH: hash
- }),
- VitePWA({
- registerType: "autoUpdate",
- devOptions: {
- enabled: true
- }
})
+ // VitePWA({
+ // registerType: "autoUpdate",
+ // devOptions: {
+ // enabled: true
+ // }
+ // })
],
build: {
target: "esnext",