// components/GiteaWidget/GiteaWidget.jsx import React, { useState, useEffect } from 'react'; import useGiteaCommits from '../../hooks/useGiteaCommits'; import GiteaCommitItem from "./GiteaCommitItem"; import { FaCodeBranch, FaSync, FaExclamationTriangle, FaServer, FaCog } from 'react-icons/fa'; import '../../styles/GiteaWidget.css'; // Get environment variables from import.meta.env const ENV = { GITEA_API_URL: import.meta.env.VITE_GITEA_API_URL, DEFAULT_REPO: import.meta.env.VITE_DEFAULT_REPO, GITEA_TOKEN: import.meta.env.VITE_GITEA_TOKEN, COMMIT_LIMIT: parseInt(import.meta.env.VITE_COMMIT_LIMIT) || 5, DEFAULT_BRANCH: import.meta.env.VITE_DEFAULT_BRANCH, SHOW_CONFIG: import.meta.env.VITE_SHOW_CONFIG !== 'false', MODE: import.meta.env.MODE, // 'development', 'production', etc. DEV: import.meta.env.DEV, PROD: import.meta.env.PROD }; const GiteaWidget = ({ // Use environment variables as defaults defaultGiteaUrl = ENV.GITEA_API_URL || 'https://gitea.example.com', defaultRepo = ENV.DEFAULT_REPO || 'owner/repo', token = ENV.GITEA_TOKEN || null, limit = ENV.COMMIT_LIMIT || 5, branch = ENV.DEFAULT_BRANCH || 'main', title = 'Recent Commits', showConfig = ENV.SHOW_CONFIG }) => { const [giteaUrl, setGiteaUrl] = useState(defaultGiteaUrl); const [repo, setRepo] = useState(defaultRepo); const [inputGiteaUrl, setInputGiteaUrl] = useState(defaultGiteaUrl); const [inputRepo, setInputRepo] = useState(defaultRepo); const [showAdvanced, setShowAdvanced] = useState(false); // Log environment variables in development useEffect(() => { if (ENV.DEV) { console.log('Vite Environment Variables:', { GITEA_API_URL: ENV.GITEA_API_URL, DEFAULT_REPO: ENV.DEFAULT_REPO, hasToken: !!ENV.GITEA_TOKEN, MODE: ENV.MODE, allEnv: import.meta.env }); } }, []); const { commits, loading, error } = useGiteaCommits( giteaUrl, repo, token, limit, branch ); const handleSubmit = (e) => { e.preventDefault(); // Validate URL let url = inputGiteaUrl?.trim(); if (url && !url.startsWith('http')) { url = `https://${url}`; } // Remove trailing slash if present url = url?.replace(/\/$/, '') || defaultGiteaUrl; setGiteaUrl(url); // Validate repo format if (inputRepo.includes('/')) { setRepo(inputRepo); } else { alert('Repository must be in format "owner/repo"'); } }; // Reset to environment defaults const resetToDefaults = () => { setGiteaUrl(defaultGiteaUrl); setRepo(defaultRepo); setInputGiteaUrl(defaultGiteaUrl); setInputRepo(defaultRepo); }; return (

{title}

{ENV.MODE === 'development' ? 'DEV' : ENV.MODE} {showConfig && (
)}
{/* Configuration form */} {showConfig && showAdvanced && (
setInputGiteaUrl(e.target.value)} placeholder={defaultGiteaUrl} className="url-input" /> Default from .env: {defaultGiteaUrl}
setInputRepo(e.target.value)} placeholder={defaultRepo} className="repo-input" /> Format: owner/repo | Default from .env: {defaultRepo}
)} {/* Current configuration display */}
Instance: {giteaUrl === defaultGiteaUrl ? 'Default' : 'Custom'} Repo: {repo} Branch: {branch} Showing: {limit} commits {ENV.DEV && ( Mode: {ENV.MODE} )}
{/* Widget body */}
{loading ? (
Loading commits from {repo}...
) : error ? (

Failed to load commits

{error} {ENV.DEV && (

Debug info:

  • URL: {giteaUrl}
  • Repo: {repo}
  • Has Token: {token ? 'Yes' : 'No'}
  • Mode: {ENV.MODE}
)}
) : (
{commits.length > 0 ? ( commits.map((commit) => ( )) ) : (
No commits found in the {branch} branch
)}
)}
View on Gitea → {commits.length} commits shown {ENV.DEV && ` (${ENV.MODE})`}
); }; // Add default props using environment variables GiteaWidget.defaultProps = { defaultGiteaUrl: ENV.GITEA_API_URL || 'https://gitea.example.com', defaultRepo: ENV.DEFAULT_REPO || 'owner/repo', token: ENV.GITEA_TOKEN || null, limit: ENV.COMMIT_LIMIT || 5, branch: ENV.DEFAULT_BRANCH || 'main', title: 'Recent Commits', showConfig: ENV.SHOW_CONFIG }; export default GiteaWidget;