import { useEffect, useState } from "react"; import { motion } from "framer-motion"; import dashboard from "../assets/images/dashboard.png"; import qsvProLogo from "../assets/logos/qsv-pro-logo.png"; import Download from "../assets/icons/Download.jsx"; export const Hero = () => { const [downloadData, setDownloadData] = useState(); const [OS, setOS] = useState(); const [name, setName] = useState(); useEffect(() => { (async () => { const userAgent = window.navigator.userAgent; // Ignore mobile view for now if ( userAgent.includes("iPhone") || userAgent.includes("Android") || userAgent.includes("iPad") || window.innerWidth < 768 ) { setOS("unknown"); return; } try { const data = await ( await fetch( "https://api.github.com/repos/dathere/qsv-pro-releases/releases" ) ).json(); const name = data[0].name; setName(name); const version = name.slice(1); const downloadData = { windows: [ `qsv.pro_${version}_x64_en-US.msi`, `qsv.pro_${version}_x64-setup.exe`, ], macos: [ `qsv.pro_x64.app.tar.gz`, `qsv.pro_aarch64.app.tar.gz`, `qsv.pro_${version}_x64.dmg`, `qsv.pro_${version}_aarch64.dmg`, ], linux: [ `qsv-pro_${version}_amd64.AppImage`, `qsv-pro_${version}_amd64.deb`, ], }; setDownloadData(downloadData); if (userAgent.includes("Windows")) { setOS("windows"); } else if (userAgent.includes("Macintosh")) { setOS("macos"); } else if (userAgent.includes("Linux")) { setOS("linux"); } } catch (e) { console.error( "Unable to fetch API data from releases repository: " + String(e) ); console.log("Showing default download button to user."); } })(); }, []); return (
Spreadsheet Data Wrangling Desktop App
{/* qsv pro */} qsv pro logo

(preview)

Transform and upload spreadsheet data to{" "} CKAN {" "} with our streamlined desktop app, featuring "recipes" for common data wrangling tasks. Based on the{" "} qsv {" "} CLI tool.
{downloadData && OS !== "unknown" ? ( <>

Start your 7-day free trial,{" "} no payment required.

{Object.keys(downloadData).map( (platform) => (

{platform === "macos" ? "macOS" : platform[0].toUpperCase() + platform.slice(1)}

{downloadData && platform === "windows" && ( You may get an antivirus notification that you have to skip. )} {downloadData[platform].map( (download, index) => ( {download} ) )}
) )}
) : ( <>
Download qsv pro

Start your 7-day free trial,{" "} no payment required.

)} {/*
Live demo
*/}
123
); };