Skip to content

Commit c2505ad

Browse files
committed
style: 💄优化了历史记录回滚的布局
1 parent 4e504c4 commit c2505ad

File tree

2 files changed

+60
-27
lines changed

2 files changed

+60
-27
lines changed
Lines changed: 55 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
2-
import { HistoryIcon, LoaderCircle } from "lucide-react";
1+
import { GitPullRequestArrow, HistoryIcon, LoaderCircle } from "lucide-react";
32
import { ExposeParam } from "md-editor-rt";
43
import { RefObject, useState } from "react";
54
import { Button } from "@/components/ui/button";
@@ -9,17 +8,23 @@ import { RepoNames, ResCommit } from "@/lib/github.types";
98
import dayjs from "dayjs";
109
import relativeTime from "dayjs/plugin/relativeTime";
1110
import zh from "dayjs/locale/zh-cn";
11+
import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet";
12+
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
13+
import { TooltipButton } from "@/components/tooltip-button";
14+
import { open } from "@tauri-apps/plugin-shell";
1215

1316
dayjs.extend(relativeTime)
1417
dayjs.locale(zh)
1518

1619
export default function History({mdRef}: {mdRef: RefObject<ExposeParam>}) {
20+
const [sheetOpen, setSheetOpen] = useState(false);
1721
const { activeFilePath, setCurrentArticle, currentArticle } = useArticleStore()
1822
const [commits, setCommits] = useState<ResCommit[]>([])
1923
const [loading, setLoading] = useState(false)
2024
const [commitsLoading, setCommitsLoading] = useState(false)
2125

2226
async function onOpenChange(e: boolean) {
27+
setSheetOpen(e)
2328
if (!e) return
2429
setCommitsLoading(true)
2530
setCommits([])
@@ -31,6 +36,7 @@ export default function History({mdRef}: {mdRef: RefObject<ExposeParam>}) {
3136

3237
async function handleCommit(sha: string) {
3338
setLoading(true)
39+
setSheetOpen(false)
3440
const cacheArticle = currentArticle;
3541
setCurrentArticle('正在读取历史记录...')
3642
const res = await getFiles({path: `${activeFilePath}?ref=${sha}`, repo: RepoNames.article})
@@ -41,35 +47,58 @@ export default function History({mdRef}: {mdRef: RefObject<ExposeParam>}) {
4147
}
4248
setLoading(false)
4349
}
50+
51+
function openHandler(url: string) {
52+
open(url)
53+
}
4454
return (
45-
<DropdownMenu onOpenChange={onOpenChange}>
46-
<DropdownMenuTrigger asChild className="outline-none">
55+
<Sheet open={sheetOpen} onOpenChange={onOpenChange}>
56+
<SheetTrigger asChild>
4757
<Button variant="ghost" size="icon" title="翻译">
4858
{
4959
loading ? <LoaderCircle className="animate-spin size-4" /> : <HistoryIcon />
5060
}
5161
</Button>
52-
</DropdownMenuTrigger>
53-
<DropdownMenuContent align="end">
54-
<DropdownMenuLabel>历史记录(60秒间隔)</DropdownMenuLabel>
55-
<DropdownMenuSeparator />
56-
{
57-
commitsLoading ?
58-
<DropdownMenuItem><LoaderCircle className="animate-spin size-4" />正在获取历史记录...</DropdownMenuItem> :
59-
<DropdownMenuGroup>
60-
{
61-
commits.length ?
62-
commits.map((commit) => (
63-
<DropdownMenuItem className="flex justify-between" key={commit.sha} onClick={() => handleCommit(commit.sha)}>
64-
<span>{commit.commit.message}</span>
65-
<span className="ml-4">{dayjs(commit.commit.committer.date).fromNow()}</span>
66-
</DropdownMenuItem>
67-
)) :
68-
<DropdownMenuItem>暂无历史记录</DropdownMenuItem>
69-
}
70-
</DropdownMenuGroup>
71-
}
72-
</DropdownMenuContent>
73-
</DropdownMenu>
62+
</SheetTrigger>
63+
<SheetContent className="p-0 min-w-[500px]">
64+
<SheetHeader className="p-4 border-b">
65+
<SheetTitle>历史记录</SheetTitle>
66+
<SheetDescription className="flex items-center gap-1">
67+
{
68+
commitsLoading ? <LoaderCircle className="size-4 animate-spin" /> : <HistoryIcon className="size-4" />
69+
}
70+
{
71+
commitsLoading ? <span>加载中</span> : <span>{commits.length} 条记录</span>
72+
}
73+
</SheetDescription>
74+
</SheetHeader>
75+
<div className="max-h-[calc(100vh-90px)] overflow-y-auto">
76+
{
77+
commits.map((commit) => (
78+
<div className="flex justify-between items-center gap-4 border-b px-4 py-2" key={commit.sha}>
79+
<div className="flex-1 flex flex-col">
80+
<span
81+
className="text-sm line-clamp-1 hover:underline cursor-pointer"
82+
onClick={() => openHandler(commit.html_url)}
83+
>{commit.commit.message}</span>
84+
<div className="flex gap-1 items-center mt-2">
85+
<Avatar className="size-5">
86+
<AvatarImage src={commit.author.avatar_url} alt={commit.author.login} />
87+
<AvatarFallback>CN</AvatarFallback>
88+
</Avatar>
89+
<span className="text-xs text-zinc-500">
90+
{commit.author.login} 提交于 {dayjs(commit.commit.committer.date).fromNow()}
91+
</span>
92+
</div>
93+
</div>
94+
<div className="w-8">
95+
<TooltipButton icon={<GitPullRequestArrow />} tooltipText="拉取" onClick={() => handleCommit(commit.sha)} />
96+
</div>
97+
</div>
98+
))
99+
}
100+
</div>
101+
</SheetContent>
102+
</Sheet>
74103
)
75104
}

src/app/core/article/custom-toolbar/sync.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ export default function Sync({mdRef}: {mdRef: RefObject<ExposeParam>}) {
5050
repo: RepoNames.article
5151
})
5252
if (uploadRes?.status === 200 || uploadRes?.status === 201) {
53-
toast({title: '同步成功', description: uploadRes.data?.commit.message})
53+
if (uploadRes.data.content?.sha === sha) {
54+
toast({title: '内容未改变,无需提交', variant: 'destructive'})
55+
} else {
56+
toast({title: '同步成功', description: uploadRes.data?.commit.message})
57+
}
5458
}
5559
setLoading(false)
5660
}

0 commit comments

Comments
 (0)