Path: blob/master/src/packages/frontend/admin/registration-token-license-summary.tsx
5996 views
/*1* This file is part of CoCalc: Copyright © 2020-2025 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import { useEffect, useState } from "react";67import {8site_license_public_info,9trunc_license_id,10} from "@cocalc/frontend/site-licenses/util";11import { describe_quota } from "@cocalc/util/licenses/describe-quota";1213interface Props {14licenseId?: string;15}1617export default function LicenseSummary({ licenseId }: Props) {18const [summary, setSummary] = useState<string>("None");1920useEffect(() => {21let isMounted = true;22if (!licenseId) {23setSummary("None");24return;25}26setSummary("Loading...");27(async () => {28try {29const info = await site_license_public_info(licenseId);30if (!isMounted) return;31if (!info) {32setSummary(`${trunc_license_id(licenseId)} (not found)`);33return;34}35const parts: string[] = [];36if (info.title) parts.push(info.title);37if (info.description) parts.push(info.description);38if (info.quota) {39const quotaDesc = describe_quota(info.quota);40if (quotaDesc) parts.push(quotaDesc);41}42const text = parts.filter(Boolean).join(" — ");43setSummary(text || trunc_license_id(licenseId));44} catch (err) {45if (isMounted) {46setSummary(`${trunc_license_id(licenseId)} (error loading)`);47}48}49})();50return () => {51isMounted = false;52};53}, [licenseId]);5455if (!licenseId) return <span>None</span>;56return <span title={licenseId}>{summary}</span>;57}585960