diff --git a/src/components/GitHubInstallButtons/index.tsx b/src/components/GitHubInstallButtons/index.tsx index f86c77da..25c59244 100644 --- a/src/components/GitHubInstallButtons/index.tsx +++ b/src/components/GitHubInstallButtons/index.tsx @@ -1,15 +1,25 @@ import React, { useState, useEffect } from 'react'; import { RxGithubLogo } from "react-icons/rx"; import { VscVscode } from "react-icons/vsc"; -import { GITHUB_MAIN_REPO_URL, SIGN_IN_URL, SIGN_UP_URL, VSCODE_MARKETPLACE_URL } from '@site/src/constants'; +import { + GITHUB_MAIN_REPO_SLUG, + GITHUB_MAIN_REPO_URL, + VSCODE_MARKETPLACE_EXTENSION_ID, + VSCODE_MARKETPLACE_URL, +} from '@site/src/constants'; import styles from './styles.module.css'; // Number formatting function function formatNumber(num: number): string { + if (num < 10000) { + return num.toLocaleString(); + } + if (num >= 1000000) { const truncated = Math.floor((num / 1000000) * 10) / 10; return truncated.toFixed(1) + "M"; } + const truncated = Math.floor((num / 1000) * 10) / 10; return truncated.toFixed(1) + "k"; } @@ -17,7 +27,7 @@ function formatNumber(num: number): string { // GitHub Stars API async function getGitHubStars() { try { - const res = await fetch("https://api.github.com/repos/RooCodeInc/Roo-Code"); + const res = await fetch(`https://api.github.com/repos/${GITHUB_MAIN_REPO_SLUG}`); const data = await res.json(); if (typeof data.stargazers_count !== "number") { @@ -47,7 +57,7 @@ async function getVSCodeDownloads() { criteria: [ { filterType: 7, - value: "RooVeterinaryInc.roo-cline", + value: VSCODE_MARKETPLACE_EXTENSION_ID, }, ], }, @@ -70,7 +80,7 @@ async function getVSCodeDownloads() { return null; } - return formatNumber(installStat.value); + return installStat.value; } catch (error) { console.error("Error fetching VSCode downloads:", error); return null; @@ -78,8 +88,8 @@ async function getVSCodeDownloads() { } export default function GitHubInstallButtons(): React.JSX.Element { - const [stars, setStars] = useState("15.4k"); - const [downloads, setDownloads] = useState("574.1k"); + const [stars, setStars] = useState(null); + const [downloads, setDownloads] = useState(null); useEffect(() => { // Fetch live data @@ -88,7 +98,7 @@ export default function GitHubInstallButtons(): React.JSX.Element { }); getVSCodeDownloads().then(count => { - if (count) setDownloads(count); + if (count) setDownloads(formatNumber(count)); }); }, []); @@ -122,4 +132,4 @@ export default function GitHubInstallButtons(): React.JSX.Element { ); -} \ No newline at end of file +} diff --git a/src/constants.ts b/src/constants.ts index c0cbee9f..bb2a29cb 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -3,7 +3,8 @@ */ // GitHub repository information -export const GITHUB_REPO_URL = 'https://github.com/Zoo-Code-Org/Zoo-Code-Docs'; +export const GITHUB_REPO_SLUG = 'Zoo-Code-Org/Zoo-Code-Docs'; +export const GITHUB_REPO_URL = `https://github.com/${GITHUB_REPO_SLUG}`; export const GITHUB_ISSUES_URL = `${GITHUB_REPO_URL}/issues`; export const GITHUB_NEW_ISSUE_URL = `${GITHUB_ISSUES_URL}/new`; @@ -14,11 +15,13 @@ export const TWITTER_URL = 'https://x.com/ZooCodeDev'; export const LINKEDIN_URL = 'https://www.linkedin.com'; // GitHub links -export const GITHUB_MAIN_REPO_URL = 'https://github.com/Zoo-Code-Org/Zoo-Code'; +export const GITHUB_MAIN_REPO_SLUG = 'Zoo-Code-Org/Zoo-Code'; +export const GITHUB_MAIN_REPO_URL = `https://github.com/${GITHUB_MAIN_REPO_SLUG}`; export const GITHUB_ISSUES_MAIN_URL = `${GITHUB_MAIN_REPO_URL}/issues`; export const GITHUB_FEATURES_URL = `${GITHUB_MAIN_REPO_URL}/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop`; // Download links +export const VSCODE_MARKETPLACE_EXTENSION_ID = 'ZooCodeOrganization.zoo-code'; export const VSCODE_MARKETPLACE_URL = 'https://marketplace.visualstudio.com/items?itemName=ZooCodeOrganization.zoo-code'; export const OPEN_VSX_URL = 'https://open-vsx.org/extension/ZooCodeOrganization.zoo-code';