2024-07-20 02:18:15 +02:00
|
|
|
import * as React from "bloatless-react";
|
|
|
|
|
|
2024-07-22 19:52:08 +02:00
|
|
|
import ConnectionModel from "../../Model/Global/connectionModel";
|
2024-07-25 16:02:49 +02:00
|
|
|
import CoreViewModel from "./coreViewModel";
|
2024-07-20 02:18:15 +02:00
|
|
|
|
|
|
|
|
export default class ConnectionViewModel {
|
2026-04-01 08:29:39 +00:00
|
|
|
// state
|
|
|
|
|
serverAddressInput: React.State<string> = new React.State("");
|
|
|
|
|
isConnected: React.State<boolean> = new React.State(false);
|
|
|
|
|
|
|
|
|
|
isShowingConnectionModal: React.State<boolean> = new React.State(false);
|
|
|
|
|
|
|
|
|
|
previousAddresses: React.ListState<string> = new React.ListState();
|
|
|
|
|
|
|
|
|
|
// guards
|
|
|
|
|
cannotConnect: React.State<boolean> = React.createProxyState(
|
|
|
|
|
[this.serverAddressInput, this.isConnected],
|
|
|
|
|
() =>
|
|
|
|
|
(this.isConnected.value == true &&
|
|
|
|
|
this.serverAddressInput.value ==
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.connectionModel.address) ||
|
2026-04-01 08:29:39 +00:00
|
|
|
this.serverAddressInput.value == "",
|
2024-07-24 03:02:49 +02:00
|
|
|
);
|
2026-04-01 08:29:39 +00:00
|
|
|
cannotDisonnect: React.State<boolean> = React.createProxyState(
|
|
|
|
|
[this.isConnected],
|
|
|
|
|
() => this.isConnected.value == false,
|
|
|
|
|
);
|
|
|
|
|
hasNoPreviousConnections: React.State<boolean> = React.createProxyState(
|
|
|
|
|
[this.previousAddresses],
|
|
|
|
|
() => this.previousAddresses.value.size == 0,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// handlers
|
|
|
|
|
connectionChangeHandler = (): void => {
|
2026-04-09 16:48:22 +00:00
|
|
|
this.isConnected.value = this.coreViewModel.connectionModel.isConnected;
|
|
|
|
|
|
|
|
|
|
if (this.coreViewModel.connectionModel.isConnected == false) return;
|
|
|
|
|
if (this.coreViewModel.connectionModel.address == undefined) return;
|
|
|
|
|
|
|
|
|
|
this.serverAddressInput.value =
|
|
|
|
|
this.coreViewModel.connectionModel.address;
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
!this.previousAddresses.value.has(
|
|
|
|
|
this.coreViewModel.connectionModel.address,
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
this.previousAddresses.add(
|
|
|
|
|
this.coreViewModel.connectionModel.address,
|
|
|
|
|
);
|
2026-04-01 08:29:39 +00:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// methods
|
|
|
|
|
connect = (): void => {
|
|
|
|
|
this.connectToAddress(this.serverAddressInput.value);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
connectToAddress = (address: string): void => {
|
2026-04-06 15:50:13 +00:00
|
|
|
console.log(address);
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.connectionModel.connect(address);
|
2026-04-01 08:29:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
disconnect = (): void => {
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.connectionModel.disconnect();
|
2026-04-01 08:29:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
removePreviousAddress = (address: string): void => {
|
2026-04-09 16:48:22 +00:00
|
|
|
this.coreViewModel.connectionModel.removeAddress(address);
|
2026-04-01 08:29:39 +00:00
|
|
|
this.updatePreviousAddresses();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// view
|
|
|
|
|
showConnectionModal = (): void => {
|
|
|
|
|
this.isShowingConnectionModal.value = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
hideConnectionModal = (): void => {
|
|
|
|
|
this.isShowingConnectionModal.value = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
updatePreviousAddresses = (): void => {
|
|
|
|
|
this.previousAddresses.clear();
|
2026-04-09 16:48:22 +00:00
|
|
|
this.previousAddresses.add(
|
|
|
|
|
...this.coreViewModel.connectionModel.addresses,
|
|
|
|
|
);
|
2026-04-01 08:29:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// init
|
2026-04-13 10:58:21 +00:00
|
|
|
constructor(public readonly coreViewModel: CoreViewModel) {
|
2026-04-01 08:29:39 +00:00
|
|
|
this.updatePreviousAddresses();
|
|
|
|
|
|
2026-04-09 16:48:22 +00:00
|
|
|
coreViewModel.connectionModel.connectionChangeHandlerManager.addHandler(
|
2026-04-01 08:29:39 +00:00
|
|
|
this.connectionChangeHandler,
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-07-20 02:18:15 +02:00
|
|
|
}
|