/* Copyright 2022 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import { FC, FormEventHandler, ReactNode, useCallback, useState } from "react"; import { MatrixClient } from "matrix-js-sdk/src/client"; import { Trans, useTranslation } from "react-i18next"; import { useHistory } from "react-router-dom"; import styles from "./CallEndedView.module.css"; import feedbackStyle from "../input/FeedbackInput.module.css"; import { Button, LinkButton } from "../button"; import { useProfile } from "../profile/useProfile"; import { Body, Link, Headline } from "../typography/Typography"; import { Header, HeaderLogo, LeftNav, RightNav } from "../Header"; import { PosthogAnalytics } from "../analytics/PosthogAnalytics"; import { FieldRow, InputField } from "../input/Input"; import { StarRatingInput } from "../input/StarRatingInput"; import { RageshakeButton } from "../settings/RageshakeButton"; interface Props { client: MatrixClient; isPasswordlessUser: boolean; confineToRoom: boolean; endedCallId: string; leaveError?: Error; reconnect: () => void; } export const CallEndedView: FC = ({ client, isPasswordlessUser, confineToRoom, endedCallId, leaveError, reconnect, }) => { const { t } = useTranslation(); const history = useHistory(); const { displayName } = useProfile(client); const [surveySubmitted, setSurverySubmitted] = useState(false); const [starRating, setStarRating] = useState(0); const [submitting, setSubmitting] = useState(false); const [submitDone, setSubmitDone] = useState(false); const submitSurvery: FormEventHandler = useCallback( (e) => { e.preventDefault(); const data = new FormData(e.target as HTMLFormElement); const feedbackText = data.get("feedbackText") as string; PosthogAnalytics.instance.eventQualitySurvey.track( endedCallId, feedbackText, starRating ); setSubmitting(true); setTimeout(() => { setSubmitDone(true); setTimeout(() => { if (isPasswordlessUser) { // setting this renders the callEndedView with the invitation to create an account setSurverySubmitted(true); } else if (!confineToRoom) { // if the user already has an account immediately go back to the home screen history.push("/"); } }, 1000); }, 1000); }, [endedCallId, history, isPasswordlessUser, confineToRoom, starRating] ); const createAccountDialog = isPasswordlessUser && (

Why not finish by setting up a password to keep your account?

You'll be able to keep your name and set an avatar for use on future calls

{t("Create account")}
); const qualitySurveyDialog = (

We'd love to hear your feedback so we can improve your experience.

{" "} {submitDone ? (

Thanks for your feedback!

) : ( )}
); const renderBody = (): ReactNode => { if (leaveError) { return ( <>
You were disconnected from the call
{!confineToRoom && ( {t("Return to home screen")} )} ); } else { return ( <>
{surveySubmitted ? t("{{displayName}}, your call has ended.", { displayName, }) : t("{{displayName}}, your call has ended.", { displayName, }) + "\n" + t("How did it go?")} {(!surveySubmitted || confineToRoom) && PosthogAnalytics.instance.isEnabled() ? qualitySurveyDialog : createAccountDialog}
{!confineToRoom && ( {t("Not now, return to home screen")} )} ); } }; return ( <>
{!confineToRoom && }
{renderBody()}
); };