import {AbstractModal} from "tc-shared/ui/react-elements/modal/Definitions"; import React, {useContext} from "react"; import {Translatable} from "tc-shared/ui/react-elements/i18n"; import {UiVariableConsumer} from "tc-shared/ui/utils/Variable"; import {ModalPokeEvents, ModalPokeVariables, PokeRecord} from "tc-shared/ui/modal/poke/Definitions"; import {IpcRegistryDescription, Registry} from "tc-events"; import {createIpcUiVariableConsumer, IpcVariableDescriptor} from "tc-shared/ui/utils/IpcVariable"; import {ClientTag} from "tc-shared/ui/tree/EntryTags"; import {BBCodeRenderer} from "tc-shared/text/bbcode"; import {Button} from "tc-shared/ui/react-elements/Button"; import moment from "moment"; const cssStyle = require("./Renderer.scss"); const VariablesContext = React.createContext>(undefined); const PokeRenderer = React.memo((props: { poke: PokeRecord }) => (
{moment(props.poke.timestamp).format("HH:mm:ss")}
 - 
pokes you
:
)) const ServerPokeListRenderer = React.memo((props: { pokes: PokeRecord[] }) => (
{props.pokes.last().serverName}
{props.pokes.map(entry => ( ))}
)); const PokeListRenderer = React.memo(() => { const variables = useContext(VariablesContext); const pokes = variables.useReadOnly("pokeList", undefined, []); let serverPokes: {[key: string]: PokeRecord[]} = {}; pokes.forEach(entry => (serverPokes[entry.serverUniqueId] || (serverPokes[entry.serverUniqueId] = [])).push(entry)); for(const uniqueId of Object.keys(serverPokes)) { serverPokes[uniqueId].sort((a, b) => a.timestamp - b.timestamp); } const sortedServerUniqueIds = Object.keys(serverPokes).sort((a, b) => serverPokes[a][0].timestamp - serverPokes[b][0].timestamp); return (
{sortedServerUniqueIds.map(serverUniqueId => ( ))}
) }); class PokeModal extends AbstractModal { readonly variables: UiVariableConsumer; 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 You have been poked!; } verticalAlignment(): "top" | "center" | "bottom" { return "top"; } } export default PokeModal;