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

97 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-07-20 02:18:15 +02:00
import * as React from "bloatless-react";
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 ==
this.coreViewModel.connectionModel.address) ||
2026-04-01 08:29:39 +00:00
this.serverAddressInput.value == "",
);
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 => {
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);
this.coreViewModel.connectionModel.connect(address);
2026-04-01 08:29:39 +00:00
};
disconnect = (): void => {
this.coreViewModel.connectionModel.disconnect();
2026-04-01 08:29:39 +00:00
};
removePreviousAddress = (address: string): void => {
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();
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();
coreViewModel.connectionModel.connectionChangeHandlerManager.setHandler(
"connection-view-model",
2026-04-01 08:29:39 +00:00
this.connectionChangeHandler,
);
}
2024-07-20 02:18:15 +02:00
}