58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
import { useContext } from 'react'
|
|
import { useLocation, useNavigate } from 'react-router-dom'
|
|
import { Button } from 'antd'
|
|
import { ElectronContext } from '../context/ElectronContext'
|
|
import OpenInAppIcon from '../../Icons/OpenInAppIcon'
|
|
import OpenInBrowserIcon from '../../Icons/OpenInBrowserIcon'
|
|
import config from '../../../config'
|
|
import KeyboardShortcut from './KeyboardShortcut'
|
|
|
|
const WebAppSwitcher = () => {
|
|
const { isElectron, openExternalUrl } = useContext(ElectronContext)
|
|
const location = useLocation()
|
|
const navigate = useNavigate()
|
|
|
|
const getCurrentPath = () =>
|
|
`${location.pathname}${location.search}${location.hash}`
|
|
|
|
const handleClick = () => {
|
|
const path = getCurrentPath()
|
|
|
|
if (isElectron) {
|
|
const url = window.location.protocol.startsWith('http')
|
|
? `${window.location.origin}${path}`
|
|
: `${config.webAppUrl}${path}`
|
|
|
|
openExternalUrl(url)
|
|
return
|
|
}
|
|
|
|
const redirectType =
|
|
import.meta.env.MODE === 'development' ? 'app-localhost' : 'app-scheme'
|
|
const redirect =
|
|
redirectType === 'app-localhost'
|
|
? `http://localhost:3500${path}`
|
|
: `farmcontrol://app${path}`
|
|
|
|
const params = new URLSearchParams({
|
|
redirect,
|
|
redirectType
|
|
})
|
|
|
|
navigate(`/applaunch?${params.toString()}`)
|
|
}
|
|
|
|
return (
|
|
<KeyboardShortcut shortcut='alt+w' hint='ALT W' onTrigger={handleClick}>
|
|
<Button
|
|
icon={isElectron ? <OpenInBrowserIcon /> : <OpenInAppIcon />}
|
|
type='text'
|
|
style={{ marginTop: '4px' }}
|
|
onClick={handleClick}
|
|
/>
|
|
</KeyboardShortcut>
|
|
)
|
|
}
|
|
|
|
export default WebAppSwitcher
|