Skip to content

Commit 3ffab8a

Browse files
committed
Display recent activities
1 parent 314614a commit 3ffab8a

File tree

5 files changed

+57
-73
lines changed

5 files changed

+57
-73
lines changed

packages/nextjs/app/data/mockData.ts

-58
This file was deleted.

packages/nextjs/app/page.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
"use client";
22

3-
import { mockTasksHistory } from "./data/mockData";
43
import type { NextPage } from "next";
54
import { ChildDashboard, ParentDashboard, SectionGrow } from "~~/components/kiddo-perks/";
65
import { useIsParent } from "~~/hooks/kiddo-perks";
76

87
const Home: NextPage = () => {
98
const isParent = useIsParent();
109

11-
const dashboardToDisplay = isParent ? <ParentDashboard activities={mockTasksHistory} /> : <ChildDashboard />;
10+
const dashboardToDisplay = isParent ? <ParentDashboard /> : <ChildDashboard />;
1211

1312
if (isParent === undefined) {
1413
return (
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import { ChildrenSummary, ContentHeader, PerksSummary, RecentActivitySummary } from "./";
2-
import { Activity } from "~~/types/kiddoPerks";
32

4-
type DashboardProps = {
5-
activities: Activity[];
6-
};
7-
8-
export const ParentDashboard = ({ activities }: DashboardProps) => {
3+
export const ParentDashboard = () => {
94
return (
105
<div className="px-8 py-16">
116
<ContentHeader
@@ -18,7 +13,7 @@ export const ParentDashboard = ({ activities }: DashboardProps) => {
1813
<PerksSummary />
1914
</div>
2015

21-
<RecentActivitySummary activities={activities} />
16+
<RecentActivitySummary />
2217
</div>
2318
);
2419
};

packages/nextjs/components/kiddo-perks/ParentDashboard/RecentActivitySummary.tsx

+51-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,57 @@
1+
import { useEffect, useState } from "react";
12
import Image from "next/image";
3+
import { useChildManager, usePerksManager } from "~~/hooks/kiddo-perks";
4+
import { useScaffoldEventHistory } from "~~/hooks/scaffold-eth";
25
import { Activity } from "~~/types/kiddoPerks";
36

4-
type RecentActivitySummaryProps = {
5-
activities: Activity[];
6-
};
7+
export const RecentActivitySummary = () => {
8+
const [activities, setActivities] = useState<Activity[]>([]);
9+
10+
const { perks } = usePerksManager();
11+
const { children } = useChildManager();
12+
13+
const { data: perkRedeemedEvents } = useScaffoldEventHistory({
14+
contractName: "KiddoPerks",
15+
eventName: "PerkRedeemed",
16+
fromBlock: 0n,
17+
watch: true,
18+
blockData: true,
19+
transactionData: true,
20+
receiptData: true,
21+
});
22+
23+
const { data: tokenMintedEvents } = useScaffoldEventHistory({
24+
contractName: "KiddoPerks",
25+
eventName: "TaskCompleted",
26+
fromBlock: 0n,
27+
watch: true,
28+
blockData: true,
29+
transactionData: true,
30+
receiptData: true,
31+
});
32+
33+
useEffect(() => {
34+
const perkRedeemedActivities = (perkRedeemedEvents || []).map(event => ({
35+
id: event.transaction?.transactionHash,
36+
title: `Perk ${perks.find(perk => perk.id === Number(event.args.perkId))?.title} redeemed by ${
37+
children.find(child => child.address === event.args.by)?.name
38+
}`,
39+
// @ts-ignore
40+
blockNumber: Number(event.blockNumber),
41+
}));
42+
43+
const tokenMintedActivities = (tokenMintedEvents || []).map(event => ({
44+
id: event.transaction?.transactionHash, // Si tienes un identificador único en el evento, úsalo aquí
45+
title: `Task ${event.args.title} was completed by ${
46+
children.find(child => child.address === event.args.by)?.name
47+
}`,
48+
// @ts-ignore
49+
blockNumber: Number(event.blockNumber),
50+
}));
51+
52+
setActivities([...perkRedeemedActivities, ...tokenMintedActivities].sort((a, b) => a.blockNumber + b.blockNumber));
53+
}, [perkRedeemedEvents, tokenMintedEvents]);
754

8-
export const RecentActivitySummary = ({ activities }: RecentActivitySummaryProps) => {
955
return (
1056
<section className="mt-6">
1157
<h2 className="text-lg font-semibold mb-4">Recent Activity Summary</h2>
@@ -22,7 +68,7 @@ export const RecentActivitySummary = ({ activities }: RecentActivitySummaryProps
2268

2369
<div className="ml-4">
2470
<p className="text-sm ">{activity.title}</p>
25-
<p className="text-xs mt-1">2 hours ago</p>
71+
<p>{activity.blockNumber}</p>
2672
</div>
2773
</li>
2874
))}

packages/nextjs/types/kiddoPerks.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ export type Task = {
2323
};
2424

2525
export type Activity = {
26-
id: number;
26+
id: string;
2727
title: string;
28+
blockNumber: number;
29+
// timestamp: string;
2830
};
2931

3032
export type CompletedTaskEvent = {

0 commit comments

Comments
 (0)