Files
CT/src/ViewModel/Global/connectionViewModel.ts
T

89 lines
2.5 KiB
TypeScript
Raw Normal View History

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-20 02:18:15 +02:00
export default class ConnectionViewModel {
connectionModel: ConnectionModel;
// state
serverAddressInput: React.State<string> = new React.State("");
isConnected: React.State<boolean> = new React.State(false);
2024-07-20 02:30:45 +02:00
isShowingConnectionModal: React.State<boolean> = new React.State(false);
previousAddresses: React.ListState<string> = new React.ListState();
// guards
2024-07-20 02:18:15 +02:00
cannotConnect: React.State<boolean> = React.createProxyState(
[this.serverAddressInput, this.isConnected],
() =>
(this.isConnected.value == true &&
this.serverAddressInput.value == this.connectionModel.address) ||
this.serverAddressInput.value == ""
);
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
);
2024-07-20 02:18:15 +02:00
// handlers
connectionChangeHandler = (): void => {
this.isConnected.value = this.connectionModel.isConnected;
2024-07-20 22:53:01 +02:00
if (this.connectionModel.isConnected == false) return;
2024-07-20 22:53:01 +02:00
if (this.connectionModel.address == undefined) return;
this.serverAddressInput.value = this.connectionModel.address;
2024-07-20 22:53:01 +02:00
if (!this.previousAddresses.value.has(this.connectionModel.address)) {
2024-07-20 22:44:23 +02:00
this.previousAddresses.add(this.connectionModel.address);
2024-07-20 02:18:15 +02:00
}
};
// methods
connect = (): void => {
this.connectToAddress(this.serverAddressInput.value);
2024-07-20 02:18:15 +02:00
};
connectToAddress = (address: string): void => {
this.connectionModel.connect(address);
};
2024-07-20 02:18:15 +02:00
disconnect = (): void => {
this.connectionModel.disconnect();
};
2024-07-20 03:34:54 +02:00
removePreviousAddress = (address: string): void => {
this.connectionModel.removeAddress(address);
this.updatePreviousAddresses();
};
2024-07-20 03:34:54 +02:00
2024-07-22 23:33:57 +02:00
// view
2024-07-20 02:30:45 +02:00
showConnectionModal = (): void => {
this.isShowingConnectionModal.value = true;
};
2024-07-20 02:30:45 +02:00
hideConnectionModal = (): void => {
this.isShowingConnectionModal.value = false;
};
2024-07-20 02:30:45 +02:00
2024-07-20 02:59:40 +02:00
updatePreviousAddresses = (): void => {
this.previousAddresses.clear();
this.previousAddresses.add(...this.connectionModel.addresses);
};
2024-07-20 02:59:40 +02:00
2024-07-20 02:18:15 +02:00
// init
2024-07-20 20:42:43 +02:00
constructor(connectionModel: ConnectionModel) {
2024-07-20 02:18:15 +02:00
this.connectionModel = connectionModel;
2024-07-20 02:59:40 +02:00
this.updatePreviousAddresses();
2024-07-20 22:44:23 +02:00
connectionModel.connectionChangeHandlerManager.addHandler(
this.connectionChangeHandler
);
2024-07-20 02:18:15 +02:00
}
}