feat: add pinning functionality for MinApp component

This commit is contained in:
ousugo 2025-01-19 01:53:29 +08:00 committed by kangfenmao
parent ad2713c0be
commit d9bb552f3f

View File

@ -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`