/* Copyright 2022-2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ import { type ChangeEvent, type FC, useCallback } from "react"; import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { Trans, useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; import { logger } from "matrix-js-sdk/lib/logger"; import { FieldRow, InputField, ErrorMessage } from "../input/Input"; import { useSubmitRageshake, useRageshakeRequest } from "./submit-rageshake"; import feedbackStyles from "../input/FeedbackInput.module.css"; import { AnalyticsNotice } from "../analytics/AnalyticsNotice"; import { useOptInAnalytics } from "./settings"; interface Props { roomId?: string; } export const FeedbackSettingsTab: FC = ({ roomId }) => { const { t } = useTranslation(); const { submitRageshake, sending, sent, error, available } = useSubmitRageshake(); const sendRageshakeRequest = useRageshakeRequest(); const onSubmitFeedback = useCallback( // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore (e) => { e.preventDefault(); const data = new FormData(e.target); const descriptionData = data.get("description"); const description = typeof descriptionData === "string" ? descriptionData : ""; const sendLogs = Boolean(data.get("sendLogs")); const rageshakeRequestId = secureRandomString(16); submitRageshake({ description, sendLogs, rageshakeRequestId, roomId, }).catch((e) => { logger.error("Failed to send feedback rageshake", e); }); if (roomId && sendLogs) { sendRageshakeRequest(roomId, rageshakeRequestId); } }, [submitRageshake, roomId, sendRageshakeRequest], ); const [optInAnalytics, setOptInAnalytics] = useOptInAnalytics(); const optInDescription = (
You may withdraw consent by unchecking this box. If you are currently in a call, this setting will take effect at the end of the call.
); // in the embedded package the widget host is responsible for analytics consent const analyticsConsentBlock = import.meta.env.VITE_PACKAGE === "embedded" ? null : ( <>

{t("common.analytics")}

): void => { setOptInAnalytics?.(event.target.checked); }} /> ); const feedbackBlock = available ? ( <>

{t("settings.feedback_tab_h4")}

{t("settings.feedback_tab_body")}
{!sent && ( )} {error && } {sent && {t("settings.feedback_tab_thank_you")}}
) : null; return (
{analyticsConsentBlock} {feedbackBlock}
); };