import {AbstractModal} from "tc-shared/ui/react-elements/modal/Definitions"; import React, {useContext, useEffect, useRef} from "react"; import {UiVariableConsumer} from "tc-shared/ui/utils/Variable"; import {IpcRegistryDescription, Registry} from "tc-events"; import { ModalBookmarksAddServerEvents, ModalBookmarksAddServerVariables, TargetBookmarkInfo } from "tc-shared/ui/modal/bookmarks-add-server/Definitions"; import {createIpcUiVariableConsumer, IpcVariableDescriptor} from "tc-shared/ui/utils/IpcVariable"; import {Translatable} from "tc-shared/ui/react-elements/i18n"; import {Button} from "tc-shared/ui/react-elements/Button"; import {ControlledBoxedInputField} from "tc-shared/ui/react-elements/InputField"; import {Checkbox} from "tc-shared/ui/react-elements/Checkbox"; import {ChannelTag, ServerTag} from "tc-shared/ui/tree/EntryTags"; import {IconTooltip} from "tc-shared/ui/react-elements/Tooltip"; const cssStyle = require("./Renderer.scss"); const EventContext = React.createContext>(undefined); const VariablesContext = React.createContext>(undefined); const BookmarkInfoContext = React.createContext(undefined); const BookmarkInfoProvider = React.memo((props: { children }) => { const variables = useContext(VariablesContext); const info = variables.useReadOnly("serverInfo", undefined, { type: "loading" }); return ( {props.children} ); }); const BookmarkName = React.memo(() => { const events = useContext(EventContext); const variables = useContext(VariablesContext); const name = variables.useVariable("bookmarkName", undefined); const nameValid = variables.useReadOnly("bookmarkNameValid", undefined, true); const info = useContext(BookmarkInfoContext); const refField = useRef(); useEffect(() => { if(info.type === "success") { refField.current?.focus(); } }, [ info.type === "success" ]); return ( name.setValue(newValue, true)} onBlur={() => name.setValue(name.localValue)} onEnter={() => events.fire("action_add_bookmark")} disabled={info.type !== "success"} finishOnEnter={true} /> ); }); const BookmarkChannel = React.memo(() => { const variables = useContext(VariablesContext); const info = useContext(BookmarkInfoContext); const saveCurrentChannel = variables.useVariable("saveCurrentChannel", undefined, false); let helpIcon; if(info.type === "success") { helpIcon = ( Current channel:
) } return ( saveCurrentChannel.setValue(value)} label={
Save current channel as default channel {helpIcon}
} /> ); }); const ServerName = React.memo(() => { const info = useContext(BookmarkInfoContext); if(info.type !== "success") { return null; } return ; }); const RendererBookmarkInfo = React.memo(() => { return (
Add server to bookmarks:
Bookmark name:
) }); const RendererButtons = React.memo(() => { const info = useContext(BookmarkInfoContext); const events = useContext(EventContext); const variables = useContext(VariablesContext); const nameValid = variables.useReadOnly("bookmarkNameValid", undefined, true); return (
) }) class ModalBookmarksAddServer extends AbstractModal { private readonly variables: UiVariableConsumer; private readonly events: Registry; constructor(events: IpcRegistryDescription, variables: IpcVariableDescriptor) { super(); this.variables = createIpcUiVariableConsumer(variables); this.events = Registry.fromIpcDescription(events); } renderBody(): React.ReactElement { return (
); } renderTitle(): string | React.ReactElement { return Add server to bookmarks; } } export = ModalBookmarksAddServer;