Files
cstb-next/src/components/window/Nav.tsx

186 lines
5.5 KiB
TypeScript
Raw Normal View History

2024-09-20 23:15:42 +08:00
"use client"
2025-03-14 19:13:32 +08:00
import { setTheme as setTauriTheme } from "@/hooks/tauri/theme"
2025-03-17 11:48:30 +08:00
import { useAppStore } from "@/store/app"
import { useToolStore } from "@/store/tool"
2025-03-25 00:40:32 +08:00
import { addToast, Button, Link, Tooltip, useDisclosure } from "@heroui/react"
import {
Close,
Communication,
Minus,
Moon,
Refresh,
RocketOne,
Square,
SunOne,
SurprisedFaceWithOpenBigMouth,
} from "@icon-park/react"
2025-03-14 19:13:32 +08:00
import { type Theme, getCurrentWindow } from "@tauri-apps/api/window"
2025-03-12 22:20:06 +08:00
import { /* relaunch, */ exit } from "@tauri-apps/plugin-process"
import { useTheme } from "next-themes"
2024-11-11 10:04:00 +08:00
import { usePathname, useRouter } from "next/navigation"
import { saveAllNow } from "@tauri-store/valtio"
2025-03-20 01:57:51 +08:00
import { useSteamStore } from "@/store/steam"
import { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from "@heroui/react"
2024-09-20 23:15:42 +08:00
const Nav = () => {
const { theme, setTheme } = useTheme()
2025-03-14 19:13:32 +08:00
const setAppTheme = async (theme: Theme) => {
setTheme(theme)
await setTauriTheme(theme)
}
2024-09-20 23:15:42 +08:00
const close = async () => {
// (await window.hideOnClose) ? getCurrent().hide() : exit();
await saveAllNow()
2024-09-21 01:05:40 +08:00
await exit()
}
2024-09-20 23:15:42 +08:00
const minimize = async () => {
await saveAllNow()
await getCurrentWindow().minimize()
2024-09-21 01:05:40 +08:00
}
2024-09-20 23:15:42 +08:00
const toggleMaximize = async () => {
const current = getCurrentWindow()
const maximized = await current.isMaximized()
2024-09-21 01:05:40 +08:00
await (maximized ? current.unmaximize() : current.maximize())
2024-09-20 23:15:42 +08:00
}
2024-09-21 01:05:40 +08:00
// const reset = async () => {
// await relaunch()
// }
const router = useRouter()
2024-10-28 10:42:42 +08:00
const pathname = usePathname()
2024-09-20 23:15:42 +08:00
const app = useAppStore()
2024-09-20 23:15:42 +08:00
return (
<nav className="absolute top-0 right-0 flex flex-row h-16 gap-0.5 p-4" data-tauri-drag-region>
2025-03-25 00:40:32 +08:00
<Tooltip content="启动页确认设置" showArrow={true} delay={300}>
{pathname !== "/" && (
<button
type="button"
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
onClick={() => {
app.setInited(false)
if (pathname !== "/") router.push("/")
}}
>
<RocketOne size={16} />
</button>
)}
</Tooltip>
<Tooltip content="深色模式" showArrow={true} delay={300}>
<button
type="button"
2025-03-25 00:40:32 +08:00
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
onClick={() => (theme === "light" ? setAppTheme("dark") : setAppTheme("light"))}
>
2025-03-25 00:40:32 +08:00
{theme === "light" ? <SunOne size={16} /> : <Moon size={16} />}
</button>
2025-03-25 00:40:32 +08:00
</Tooltip>
<Tooltip content="反馈" showArrow={true} delay={300}>
<Link
2025-03-25 02:51:59 +08:00
href="https://docs.qq.com/form/page/DZU1ieW9SQkxWU1RF"
target="_blank"
2025-03-25 00:40:32 +08:00
className="px-2 py-0 text-black transition duration-150 rounded dark:text-white hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
>
<button type="button">
<Communication size={16} />
</button>
</Link>
</Tooltip>
<ResetModal />
{/* { platform() === "windows" && ( */}
2024-11-11 10:04:00 +08:00
<>
<button
type="button"
2025-03-25 00:40:32 +08:00
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
2024-11-11 10:04:00 +08:00
onClick={minimize}
>
<Minus size={16} />
</button>
<button
type="button"
2025-03-25 00:40:32 +08:00
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
2024-11-11 10:04:00 +08:00
onClick={toggleMaximize}
>
<Square size={16} />
</button>
<button
type="button"
2025-03-25 00:40:32 +08:00
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
2024-11-11 10:04:00 +08:00
onClick={close}
>
<Close size={16} />
</button>
</>
{/* )} */}
2024-09-20 23:15:42 +08:00
</nav>
2024-09-21 01:05:40 +08:00
)
}
2024-09-20 23:15:42 +08:00
function ResetModal() {
const app = useAppStore()
const tool = useToolStore()
const steam = useSteamStore()
const router = useRouter()
const { isOpen, onOpen, onOpenChange } = useDisclosure()
function reset() {
app.resetAppStore()
tool.resetToolStore()
steam.resetSteamStore()
addToast({
title: "重置成功",
color: "success",
// description: "已重置所有设置",
})
router.push("/")
}
return (
<>
2025-03-25 00:40:32 +08:00
<Tooltip content="重置设置" showArrow={true} delay={300}>
<button
type="button"
className="px-2 py-0 transition duration-150 rounded hover:bg-black/10 dark:hover:bg-zinc-100/10 active:scale-95"
onClick={onOpen}
>
<Refresh size={16} />
</button>
</Tooltip>
<Modal isOpen={isOpen} onOpenChange={onOpenChange}>
<ModalContent>
{(onClose) => (
<>
<ModalHeader className="flex flex-col gap-1"></ModalHeader>
<ModalBody>
<p>CS工具箱的偏好设置为默认设置</p>
</ModalBody>
<ModalFooter>
<Button color="danger" variant="light" onPress={onClose}>
</Button>
<Button
color="primary"
onPress={() => {
reset()
onClose()
}}
>
</Button>
</ModalFooter>
</>
)}
</ModalContent>
</Modal>
</>
)
}
2024-09-21 01:05:40 +08:00
export default Nav