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
JavaScript
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)));
}