You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.7 KiB
43 lines
1.7 KiB
import { Button } from '@/components/ui/button' |
|
import { DESKTOP_APP_DOWNLOAD_URL_DEFAULT } from '@/constants' |
|
import { cn } from '@/lib/utils' |
|
import { Download } from 'lucide-react' |
|
import { useTranslation } from 'react-i18next' |
|
|
|
function resolveDesktopDownloadUrl(): string | null { |
|
if (typeof window === 'undefined') return DESKTOP_APP_DOWNLOAD_URL_DEFAULT |
|
const fromConfig = window.__RUNTIME_CONFIG__?.DESKTOP_DOWNLOAD_URL |
|
if (fromConfig !== undefined) { |
|
const trimmed = fromConfig.trim() |
|
return trimmed.length > 0 ? trimmed : null |
|
} |
|
return DESKTOP_APP_DOWNLOAD_URL_DEFAULT |
|
} |
|
|
|
/** Bottom-of-sidebar link to native (Electron) builds; hidden in the packaged app and when URL is disabled. */ |
|
export default function DownloadDesktopSidebarButton() { |
|
const { t } = useTranslation() |
|
if (typeof window !== 'undefined' && window.imwaldElectron?.isElectron) { |
|
return null |
|
} |
|
const href = resolveDesktopDownloadUrl() |
|
if (!href) return null |
|
|
|
return ( |
|
<Button |
|
variant="ghost" |
|
className={cn( |
|
'flex shadow-none items-center transition-colors duration-500 bg-transparent w-12 h-12 xl:w-full xl:h-auto xl:min-w-0 p-3 m-0 xl:py-2 xl:pl-3 xl:pr-4 rounded-lg xl:justify-start gap-3 text-lg font-semibold [&_svg]:size-full xl:[&_svg]:size-4 xl:[&_svg]:shrink-0', |
|
'text-muted-foreground hover:text-foreground' |
|
)} |
|
asChild |
|
> |
|
<a href={href} target="_blank" rel="noopener noreferrer" title={t('downloadDesktopApp')}> |
|
<Download strokeWidth={2.5} aria-hidden /> |
|
<div className="max-xl:hidden min-w-0 flex-1 text-left break-words leading-snug pr-0.5"> |
|
{t('downloadDesktopApp')} |
|
</div> |
|
</a> |
|
</Button> |
|
) |
|
}
|
|
|