UNPKG

realtime-data-cli-tool

Version:

A real-time data dashboard CLI tool built with Ink, React, and TypeScript that displays live ISS location, weather, Bitcoin prices, random facts, and inspirational quotes

44 lines (43 loc) 2.08 kB
import React, { useState, useEffect } from 'react'; import { Box } from 'ink'; import { useCurrentTime } from './hooks/useCurrentTime.js'; import { useISSData } from './hooks/useISSData.js'; import { useWeatherData } from './hooks/useWeatherData.js'; import { useFactData } from './hooks/useFactData.js'; import { useQuoteData } from './hooks/useQuoteData.js'; import { useBitcoinData } from './hooks/useBitcoinData.js'; import { Header } from './components/Header.js'; import { Footer } from './components/Footer.js'; import { LoadingScreen } from './components/LoadingScreen.js'; import { ISSTracker } from './components/ISSTracker.js'; import { WeatherDisplay } from './components/WeatherDisplay.js'; import { BitcoinPrice } from './components/BitcoinPrice.js'; import { RandomFact } from './components/RandomFact.js'; import { InspirationQuote } from './components/InspirationQuote.js'; export default function App({ name = 'Stranger' }) { const [loading, setLoading] = useState(true); const currentTime = useCurrentTime(); const issData = useISSData(); const weather = useWeatherData(); const fact = useFactData(); const quote = useQuoteData(); const bitcoin = useBitcoinData(); useEffect(() => { const timer = setTimeout(() => { setLoading(false); }, 2000); return () => clearTimeout(timer); }, []); if (loading) { return React.createElement(LoadingScreen, null); } return (React.createElement(Box, { flexDirection: "column", padding: 1 }, React.createElement(Header, { name: name, currentTime: currentTime }), React.createElement(Box, { flexDirection: "row", flexWrap: "wrap" }, React.createElement(ISSTracker, { issData: issData }), React.createElement(WeatherDisplay, { weather: weather }), React.createElement(BitcoinPrice, { bitcoin: bitcoin }), React.createElement(RandomFact, { fact: fact }), React.createElement(InspirationQuote, { quote: quote })), React.createElement(Footer, null))); }