import { openUrl } from "@tauri-apps/plugin-opener"; import { useLicense } from "@yaakapp-internal/license"; import { differenceInDays } from "date-fns"; import { formatDate } from "date-fns/format"; import { useState } from "react"; import { useToggle } from "../../hooks/useToggle"; import { pluralizeCount } from "../../lib/pluralize"; import { CargoFeature } from "../CargoFeature"; import { Banner } from "../core/Banner"; import { Button } from "../core/Button"; import { Icon } from "../core/Icon"; import { Link } from "../core/Link"; import { PlainInput } from "../core/PlainInput"; import { Separator } from "../core/Separator"; import { HStack, VStack } from "../core/Stacks"; export function SettingsLicense() { return ( ); } function SettingsLicenseCmp() { const { check, activate, deactivate } = useLicense(); const [key, setKey] = useState(""); const [activateFormVisible, toggleActivateFormVisible] = useToggle(false); if (check.isPending) { return null; } const renderBanner = () => { if (!check.data) return null; switch (check.data.status) { case "active": return Your license is active 🥳; case "trialing": return (

{pluralizeCount("day", differenceInDays(check.data.data.end, new Date()))} {" "} left to evaluate Yaak for commercial use.
Personal use is always free, forever.

Learn More

); case "personal_use": return (

Your commercial-use trial has ended.
You may continue using Yaak for personal use only.
A license is required for commercial use.

Learn More

); case "inactive": return ( Your license is invalid. Please Sign In{" "} for more details ); case "expired": return ( Your license expired{" "} {formatDate(check.data.data.periodEnd, "MMMM dd, yyyy")}. Please{" "} Resubscribe to continue receiving updates. {check.data.data.changesUrl && ( <>
What's new in latest builds )}
); case "past_due": return ( Your payment method needs attention.
To re-activate your license, please{" "} update your billing info.
); case "error": return ( License check failed: {check.data.data.message} (Code: {check.data.data.code}) ); } }; return (
{renderBanner()} {check.error && {check.error}} {activate.error && {activate.error}} {check.data?.status === "active" ? ( ) : ( )} {activateFormVisible && ( { e.preventDefault(); await activate.mutateAsync({ licenseKey: key }); toggleActivateFormVisible(); }} > )}
); }