import {ConnectProperties, ConnectUiEvents} from "tc-shared/ui/modal/connect/Definitions"; import {useContext, useState} from "react"; import {Registry} from "tc-shared/events"; import * as React from "react"; import {InternalModal} from "tc-shared/ui/react-elements/internal-modal/Controller"; import {Translatable} from "tc-shared/ui/react-elements/i18n"; import {ControlledSelect, FlatInputField, Select} from "tc-shared/ui/react-elements/InputField"; import {useTr} from "tc-shared/ui/react-elements/Helper"; import {Button} from "tc-shared/ui/react-elements/Button"; const EventContext = React.createContext>(undefined); const ConnectDefaultNewTabContext = React.createContext(false); const cssStyle = require("./Renderer.scss"); /*
{{tr "Please enter a valid server address" /}}
{{tr "Please enter a valid server nickname" /}}
{{tr "Selected profile is invalid. Select another one or fix the profile." /}}
{{if default_connect_new_tab}} {{else}} {{if multi_tab}} {{/if}} {{/if}}

Nr
{{tr "Name" /}}
{{tr "Address" /}}
{{tr "Password" /}}
{{tr "Country" /}}
{{tr "Clients" /}}
{{tr "Connections" /}}
*/ function useProperty(key: T, defaultValue: V) : ConnectProperties[T] | V { const events = useContext(EventContext); const [ value, setValue ] = useState(() => { events.fire("query_property", { property: key }); return defaultValue; }); events.reactUse("notify_property", event => event.property === key && setValue(event.value as any)); return value; } const InputServerAddress = () => { return ( Server address} labelType={"static"} /> ) } const InputServerPassword = () => { return ( Server password} labelType={"floating"} /> ) } const InputNickname = () => { const nickname = useProperty("nickname", undefined); return ( Nickname} labelType={"static"} /> ); } const InputProfile = () => { const profiles = useProperty("profiles", undefined); const selectedProfile = profiles?.profiles.find(profile => profile.id === profiles?.selected); let invalidMarker; if(profiles) { if(!selectedProfile) { invalidMarker = Select a profile; } else if(!selectedProfile.valid) { invalidMarker = Selected profile is invalid } } return (
Connect profile} invalid={invalidMarker} > {profiles?.profiles.forEach(profile => { return ( ); })}
); } const ConnectContainer = () => (
) export class ConnectModal extends InternalModal { private readonly events: Registry; private readonly connectNewTabByDefault: boolean; constructor(events: Registry, connectNewTabByDefault: boolean) { super(); this.events = events; this.connectNewTabByDefault = connectNewTabByDefault; } renderBody(): React.ReactElement { return (
); } title(): string | React.ReactElement { return Connect to a server; } color(): "none" | "blue" { return "blue"; } }