Skip to content

Commit d0ac866

Browse files
committed
chore: update statistics view
1 parent 797f5a1 commit d0ac866

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

web/src/components/UserStatisticsView.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ interface Props {
1515
}
1616

1717
interface UserMemoStats {
18-
links: number;
19-
todos: number;
18+
link: number;
19+
taskList: number;
2020
code: number;
21+
incompleteTasks: number;
2122
}
2223

2324
const UserStatisticsView = (props: Props) => {
@@ -27,7 +28,7 @@ const UserStatisticsView = (props: Props) => {
2728
const filterStore = useFilterStore();
2829
const [memoAmount, setMemoAmount] = useState(0);
2930
const [isRequesting, setIsRequesting] = useState(false);
30-
const [memoStats, setMemoStats] = useState<UserMemoStats>({ links: 0, todos: 0, code: 0 });
31+
const [memoStats, setMemoStats] = useState<UserMemoStats>({ link: 0, taskList: 0, code: 0, incompleteTasks: 0 });
3132
const days = Math.ceil((Date.now() - user.createTime!.getTime()) / 86400000);
3233
const memos = Object.values(memoStore.getState().memoMapByName);
3334
const filter = filterStore.state;
@@ -37,17 +38,20 @@ const UserStatisticsView = (props: Props) => {
3738
const { properties } = await memoServiceClient.listMemoProperties({
3839
name: `memos/-`,
3940
});
40-
const memoStats: UserMemoStats = { links: 0, todos: 0, code: 0 };
41+
const memoStats: UserMemoStats = { link: 0, taskList: 0, code: 0, incompleteTasks: 0 };
4142
properties.forEach((property) => {
4243
if (property.hasLink) {
43-
memoStats.links += 1;
44+
memoStats.link += 1;
4445
}
4546
if (property.hasTaskList) {
46-
memoStats.todos += 1;
47+
memoStats.taskList += 1;
4748
}
4849
if (property.hasCode) {
4950
memoStats.code += 1;
5051
}
52+
if (property.hasIncompleteTasks) {
53+
memoStats.incompleteTasks += 1;
54+
}
5155
});
5256
setMemoStats(memoStats);
5357
setMemoAmount(properties.length);
@@ -94,7 +98,7 @@ const UserStatisticsView = (props: Props) => {
9498
<div className="w-full mt-1 flex flex-row justify-start items-center gap-x-2 gap-y-1 flex-wrap">
9599
<div
96100
className={clsx(
97-
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:opacity-80",
101+
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:shadow",
98102
filter.memoPropertyFilter?.hasLink ? "bg-blue-50 dark:bg-blue-900 shadow" : "",
99103
)}
100104
onClick={() => filterStore.setMemoPropertyFilter({ hasLink: !filter.memoPropertyFilter?.hasLink })}
@@ -103,11 +107,11 @@ const UserStatisticsView = (props: Props) => {
103107
<Icon.Link className="w-4 h-auto mr-1" />
104108
<span className="block text-sm">{t("memo.links")}</span>
105109
</div>
106-
<span className="text-sm truncate">{memoStats.links}</span>
110+
<span className="text-sm truncate">{memoStats.link}</span>
107111
</div>
108112
<div
109113
className={clsx(
110-
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:opacity-80",
114+
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:shadow",
111115
filter.memoPropertyFilter?.hasTaskList ? "bg-blue-50 dark:bg-blue-900 shadow" : "",
112116
)}
113117
onClick={() => filterStore.setMemoPropertyFilter({ hasTaskList: !filter.memoPropertyFilter?.hasTaskList })}
@@ -116,11 +120,19 @@ const UserStatisticsView = (props: Props) => {
116120
<Icon.CheckCircle className="w-4 h-auto mr-1" />
117121
<span className="block text-sm">{t("memo.to-do")}</span>
118122
</div>
119-
<span className="text-sm truncate">{memoStats.todos}</span>
123+
{memoStats.incompleteTasks > 0 && (
124+
<>
125+
<Tooltip title={"Incomplete tasks"} placement="top" arrow>
126+
<span className="text-sm truncate">{memoStats.taskList - memoStats.incompleteTasks}</span>
127+
</Tooltip>
128+
<span className="text-sm font-mono opacity-50">/</span>
129+
</>
130+
)}
131+
<span className="text-sm truncate">{memoStats.taskList}</span>
120132
</div>
121133
<div
122134
className={clsx(
123-
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:opacity-80",
135+
"w-auto border dark:border-zinc-800 pl-1 pr-1.5 rounded-md flex justify-between items-center cursor-pointer hover:shadow",
124136
filter.memoPropertyFilter?.hasCode ? "bg-blue-50 dark:bg-blue-900 shadow" : "",
125137
)}
126138
onClick={() => filterStore.setMemoPropertyFilter({ hasCode: !filter.memoPropertyFilter?.hasCode })}

0 commit comments

Comments
 (0)