import { env } from "next-runtime-env"; import { useEffect } from "react"; import { HiMiniArrowTopRightOnSquare } from "react-icons/hi2"; import Button from "~/components/Button"; import Modal from "~/components/modal"; import { NewWorkspaceForm } from "~/components/NewWorkspaceForm"; import { PageHead } from "~/components/PageHead"; import { useModal } from "~/providers/modal"; import { usePopup } from "~/providers/popup"; import { useWorkspace } from "~/providers/workspace"; import { api } from "~/utils/api"; import Avatar from "./components/Avatar"; import CreateAPIKeyForm from "./components/CreateAPIKeyForm"; import { CustomURLConfirmation } from "./components/CustomURLConfirmation"; import { DeleteAccountConfirmation } from "./components/DeleteAccountConfirmation"; import { DeleteWorkspaceConfirmation } from "./components/DeleteWorkspaceConfirmation"; import UpdateDisplayNameForm from "./components/UpdateDisplayNameForm"; import UpdateWorkspaceDescriptionForm from "./components/UpdateWorkspaceDescriptionForm"; import UpdateWorkspaceNameForm from "./components/UpdateWorkspaceNameForm"; import UpdateWorkspaceUrlForm from "./components/UpdateWorkspaceUrlForm"; export default function SettingsPage() { const { modalContentType, openModal } = useModal(); const { workspace } = useWorkspace(); const utils = api.useUtils(); const { showPopup } = usePopup(); const { data } = api.user.getUser.useQuery(); const { data: integrations, refetch: refetchIntegrations, isLoading: integrationsLoading, } = api.integration.providers.useQuery(); const { data: trelloUrl, refetch: refetchTrelloUrl } = api.integration.getAuthorizationUrl.useQuery({ provider: "trello" }, { enabled: !integrationsLoading && !integrations?.some((integration) => integration.provider === "trello"), refetchOnWindowFocus: true, }); useEffect(() => { const handleFocus = () => { refetchIntegrations(); }; window.addEventListener("focus", handleFocus); return () => { window.removeEventListener("focus", handleFocus); }; }, [refetchIntegrations]); const { mutateAsync: disconnectTrello } = api.integration.disconnect.useMutation({ onSuccess: () => { refetchUser(); refetchIntegrations(); refetchTrelloUrl(); showPopup({ header: "Trello disconnected", message: "Your Trello account has been disconnected.", icon: "success", }); }, onError: () => { showPopup({ header: "Error disconnecting Trello", message: "An error occurred while disconnecting your Trello account.", icon: "error", }); }, }); const refetchUser = () => utils.user.getUser.refetch(); const handleOpenBillingPortal = async () => { try { const response = await fetch("/api/stripe/create_billing_session", { method: "POST", headers: { "Content-Type": "application/json", }, }); const { url } = (await response.json()) as { url: string }; if (url) { window.location.href = url; } } catch (error) { console.error("Error creating billing session:", error); } }; return ( <>
View and manage your billing and subscription.
} onClick={handleOpenBillingPortal} > Billing portalConnect your Trello account to import boards.
} onClick={() => window.open( trelloUrl.url, "trello_auth", "height=800,width=600", ) } > Connect Trello > ) : ( <>You are already connected to Trello.
> )}View and manage your API keys.
Once you delete your workspace, there is no going back. This action cannot be undone.
Once you delete your account, there is no going back. This action cannot be undone.