import * as React from "react"; import {useState} from "react"; import * as dompurify from "dompurify"; import {ChangeLog, ChangeLogEntry, ChangeSet} from "tc-shared/update/ChangeLog"; import {Translatable, VariadicTranslatable} from "tc-shared/ui/react-elements/i18n"; import {guid} from "tc-shared/crypto/uid"; import moment from "moment"; const {Remarkable} = require("remarkable"); const cssStyle = require("./Renderer.scss"); const mdRenderer = new Remarkable(); const brElementUuid = guid(); export interface DisplayableChangeList extends ChangeLog { title: React.ReactElement; url: string; } mdRenderer.renderer.rules.link_open = function (tokens, idx, options /*, env */) { const title = tokens[idx].title ? (`title="${tokens[idx].title}"`) : ''; const target = options.linkTarget ? (`target="${options.linkTarget}"`) : ''; let href = ``; href = dompurify.sanitize(href); if (href.substr(-4) !== "") { return "<-- invalid link open... -->"; } return href.substr(0, href.length - 4); }; const ChangeSetRenderer = (props: { set: ChangeSet }) => { return ( {props.set.title ?
  • {props.set.title}
  • : undefined}
    ); }; const ChangeLogEntryRenderer = React.memo((props: { entry: ChangeLogEntry }) => (
  • {props.entry.timestamp}
  • )); const DisplayableChangeListRenderer = (props: { list: DisplayableChangeList | undefined, visible: boolean }) => (
      {props.list?.changes.map((value, index) => )}
    Open full Change Log
    ); const ChangeListRenderer = (props: { left?: DisplayableChangeList, right?: DisplayableChangeList, defaultSelected: "right" | "left" | "none" }) => { const [selected, setSelected] = useState<"left" | "right" | "none">(props.defaultSelected); return (
    setSelected("left")}> {props.left?.title}
    setSelected("right")}> {props.right?.title}
    ) }; export const WhatsNew = (props: { changesUI?: ChangeLog, changesClient?: ChangeLog }) => { let subtitleLong, infoText; let changesUI = props.changesUI ? Object.assign({ title: UI Change Log, url: "https://github.com/TeaSpeak/TeaWeb/blob/master/ChangeLog.md" }, props.changesUI) : undefined; let changesClient = props.changesClient ? Object.assign({ title: Client Change Log, url: "https://github.com/TeaSpeak/TeaClient/blob/master/ChangeLog.txt" }, props.changesClient) : undefined; let versionUIDate = props.changesUI?.currentVersion, versionNativeDate = props.changesClient?.currentVersion; if (__build.target === "web") { subtitleLong = ( We've successfully updated the web client for you. ); infoText = ( {moment(__build.timestamp).format("dd.MM.YY")} ); } else if (props.changesUI && props.changesClient) { subtitleLong = ( We've successfully updated the native client and its UI for you. ); infoText = ( {versionNativeDate} {versionUIDate} ); } else if (props.changesClient) { subtitleLong = ( We've successfully updated the native client for you. ); infoText = ( {versionNativeDate} ); } else if (props.changesUI) { subtitleLong = ( We've successfully updated the native clients UI for you. ); infoText = ( {versionUIDate} ); } const changes = [changesClient, changesUI].filter(e => !!e); return (
    {tr("TeaSpeak

    Welcome back!

    {subtitleLong}

    The client has been updated.

    While you've been away, resting, we did some work.
    {infoText}
    A list of changes, bugfixes and new features can be found bellow.

    Enjoy!
    ); };