feat: add pinning functionality for MinApp component
This commit is contained in:
parent
ad2713c0be
commit
d9bb552f3f
@ -1,7 +1,8 @@
|
|||||||
/* eslint-disable react/no-unknown-property */
|
/* eslint-disable react/no-unknown-property */
|
||||||
import { CloseOutlined, ExportOutlined, ReloadOutlined } from '@ant-design/icons'
|
import { CloseOutlined, ExportOutlined, PushpinOutlined, ReloadOutlined } from '@ant-design/icons'
|
||||||
import { isMac, isWindows } from '@renderer/config/constant'
|
import { isMac, isWindows } from '@renderer/config/constant'
|
||||||
import { useBridge } from '@renderer/hooks/useBridge'
|
import { useBridge } from '@renderer/hooks/useBridge'
|
||||||
|
import { useMinapps } from '@renderer/hooks/useMinapps'
|
||||||
import store from '@renderer/store'
|
import store from '@renderer/store'
|
||||||
import { setMinappShow } from '@renderer/store/runtime'
|
import { setMinappShow } from '@renderer/store/runtime'
|
||||||
import { MinAppType } from '@renderer/types'
|
import { MinAppType } from '@renderer/types'
|
||||||
@ -20,6 +21,8 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const PopupContainer: React.FC<Props> = ({ app, resolve }) => {
|
const PopupContainer: React.FC<Props> = ({ app, resolve }) => {
|
||||||
|
const { pinned, updatePinnedMinapps } = useMinapps()
|
||||||
|
const isPinned = pinned.some((p) => p.id === app.id)
|
||||||
const [open, setOpen] = useState(true)
|
const [open, setOpen] = useState(true)
|
||||||
const [opened, setOpened] = useState(false)
|
const [opened, setOpened] = useState(false)
|
||||||
const [isReady, setIsReady] = useState(false)
|
const [isReady, setIsReady] = useState(false)
|
||||||
@ -47,6 +50,10 @@ const PopupContainer: React.FC<Props> = ({ app, resolve }) => {
|
|||||||
window.api.openWebsite(app.url)
|
window.api.openWebsite(app.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onTogglePin = () => {
|
||||||
|
const newPinned = isPinned ? pinned.filter((item) => item.id !== app.id) : [...pinned, app]
|
||||||
|
updatePinnedMinapps(newPinned)
|
||||||
|
}
|
||||||
const Title = () => {
|
const Title = () => {
|
||||||
return (
|
return (
|
||||||
<TitleContainer style={{ justifyContent: 'space-between' }}>
|
<TitleContainer style={{ justifyContent: 'space-between' }}>
|
||||||
@ -55,6 +62,9 @@ const PopupContainer: React.FC<Props> = ({ app, resolve }) => {
|
|||||||
<Button onClick={onReload}>
|
<Button onClick={onReload}>
|
||||||
<ReloadOutlined />
|
<ReloadOutlined />
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button onClick={onTogglePin} className={isPinned ? 'pinned' : ''}>
|
||||||
|
<PushpinOutlined />
|
||||||
|
</Button>
|
||||||
{canOpenExternalLink && (
|
{canOpenExternalLink && (
|
||||||
<Button onClick={onOpenLink}>
|
<Button onClick={onOpenLink}>
|
||||||
<ExportOutlined />
|
<ExportOutlined />
|
||||||
@ -188,6 +198,10 @@ const Button = styled.div`
|
|||||||
color: var(--color-text-1);
|
color: var(--color-text-1);
|
||||||
background-color: var(--color-background-mute);
|
background-color: var(--color-background-mute);
|
||||||
}
|
}
|
||||||
|
&.pinned {
|
||||||
|
color: var(--color-primary);
|
||||||
|
background-color: var(--color-primary-bg);
|
||||||
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const EmptyView = styled.div`
|
const EmptyView = styled.div`
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user