/* This file is part of the Notesnook project (https://notesnook.com/) Copyright (C) 2023 Streetwriters (Private) Limited This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ import { Debug, IssueReportResponse } from "@notesnook/core"; import { getModel, getBrand, getSystemVersion } from "react-native-device-info"; import { useThemeColors } from "@notesnook/theme"; import React, { useRef, useState } from "react"; import { Linking, Platform, Text, TextInput, View } from "react-native"; import { getVersion } from "react-native-device-info"; import { useStoredRef } from "../../../hooks/use-stored-ref"; import { eSendEvent, ToastManager } from "../../../services/event-manager"; import PremiumService from "../../../services/premium"; import { useUserStore } from "../../../stores/use-user-store"; import { openLinkInBrowser } from "../../../utils/functions"; import { defaultBorderRadius, AppFontSize } from "../../../utils/size/index"; import DialogHeader from "../../dialog/dialog-header"; import { Button } from "../../ui/button"; import Seperator from "../../ui/seperator"; import Heading from "../../ui/typography/heading"; import Paragraph from "../../ui/typography/paragraph"; import { strings } from "@notesnook/intl"; import { DefaultAppStyles } from "../../../utils/styles"; import Config from "react-native-config"; import { eCloseSheet } from "../../../utils/events"; export const Issue = ({ defaultTitle, defaultBody, issueTitle }: { defaultTitle?: string; defaultBody?: string; issueTitle?: string; }) => { const { colors } = useThemeColors(); const body = useStoredRef("issueBody", ""); const title = useStoredRef("issueTitle", defaultTitle); const [done, setDone] = useState(false); const user = useUserStore((state) => state.user); const [loading, setLoading] = useState(false); const bodyRef = useRef(null); const initialLayout = useRef(false); const issueReportResponse = useRef(undefined); const onPress = async () => { if (loading) return; if (!title.current || !body.current) return; if (title.current?.trim() === "" || body.current?.trim().length === 0) return; try { setLoading(true); issueReportResponse.current = await Debug.report({ title: title.current, body: body.current + `\n${defaultBody || ""}` + `\n_______________ **Device information:** App version: ${getVersion()} Platform: ${Platform.OS} Device: ${getBrand() || ""}-${getModel() || ""}-${getSystemVersion() || ""} Pro: ${PremiumService.get()} Logged in: ${user ? "yes" : "no"} Github Release: ${Config.GITHUB_RELEASE === "true" ? "Yes" : "No"}`, userId: user?.id }); if (!issueReportResponse.current) { setLoading(false); ToastManager.show({ heading: "Failed to report issue on github", type: "error", context: "local" }); return; } setLoading(false); body.reset(); title.reset(); setDone(true); } catch (e) { setLoading(false); ToastManager.show({ heading: (e as Error).message, type: "error" }); } }; function getResponseInfo(response?: IssueReportResponse) { if (!response || "error" in response) return; switch (response.type) { case "email": { return { title: strings.yourSupportRequestHasBeenForwarded(), message: strings.supportEmailMessage() }; } case "discussion": { const url = response.url; return { title: strings.thankYouForFeedback(), positiveButtonText: strings.copyLink(), message: strings.featureRequestMessage(url), url: url }; } case "issue": { const url = response.url; return { title: strings.thankYouForReporting(), positiveButtonText: strings.copyLink(), message: strings.bugReportMessage(url), url: url }; } } } const responseInfo = getResponseInfo(issueReportResponse.current); console.log(responseInfo, issueReportResponse.current); return ( {done ? ( <> {responseInfo?.title} {responseInfo?.message}