Skip to content

Commit 85c2fe3

Browse files
author
Sitraka Joël ANDRIATIANA
committed
Initial commit
1 parent a053746 commit 85c2fe3

File tree

7 files changed

+182
-98
lines changed

7 files changed

+182
-98
lines changed

package-lock.json

+47-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"next": "13.4.5",
1818
"react": "18.2.0",
1919
"react-dom": "18.2.0",
20-
"typescript": "5.1.3"
20+
"typescript": "5.1.3",
21+
"zustand": "^4.3.8"
2122
}
2223
}

src/hooks/useLocalStorage.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const useLocalStorage = () => {
2+
3+
}
4+
5+
export {
6+
useLocalStorage
7+
}

src/pages/index.tsx

+30-96
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,48 @@
1-
import Head from 'next/head'
2-
import Image from 'next/image'
3-
import { Inter } from 'next/font/google'
4-
import styles from '@/styles/Home.module.css'
1+
import Head from "next/head";
2+
import { useRouter } from "next/router";
3+
4+
/**
5+
Calculates the time difference between the server time and client time.
6+
@param {Date} serverTime - The server time.
7+
@param {Date} clientTime - The client time.
8+
@returns {string} The time difference in the format "{days} days, {hours} hours, {minutes} minutes, {seconds} seconds".
9+
*/
10+
const calculateTimeDifference = (server: Date, client: Date) => {};
511

6-
const inter = Inter({ subsets: ['latin'] })
712

813
export default function Home() {
14+
const router = useRouter();
15+
const moveToTaskManager = () => {
16+
router.push("/tasks");
17+
}
918
return (
1019
<>
1120
<Head>
12-
<title>Create Next App</title>
13-
<meta name="description" content="Generated by create next app" />
21+
<title>Web 2 - Exam TD</title>
22+
<meta name="description" content="Just an exam" />
1423
<meta name="viewport" content="width=device-width, initial-scale=1" />
1524
<link rel="icon" href="/favicon.ico" />
1625
</Head>
17-
<main className={`${styles.main} ${inter.className}`}>
18-
<div className={styles.description}>
26+
<main>
27+
<h1>The easiest exam you will ever find</h1>
28+
<div>
29+
{/* Display here the server time (DD-MM-AAAA HH:mm)*/}
1930
<p>
20-
Get started by editing&nbsp;
21-
<code className={styles.code}>src/pages/index.tsx</code>
31+
Server time:{" "}
32+
<span className="serverTime">{/* Replace with the value */}</span>
2233
</p>
23-
<div>
24-
<a
25-
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
26-
target="_blank"
27-
rel="noopener noreferrer"
28-
>
29-
By{' '}
30-
<Image
31-
src="/vercel.svg"
32-
alt="Vercel Logo"
33-
className={styles.vercelLogo}
34-
width={100}
35-
height={24}
36-
priority
37-
/>
38-
</a>
39-
</div>
40-
</div>
4134

42-
<div className={styles.center}>
43-
<Image
44-
className={styles.logo}
45-
src="/next.svg"
46-
alt="Next.js Logo"
47-
width={180}
48-
height={37}
49-
priority
50-
/>
35+
{/* Display here the time difference between the server side and the client side */}
36+
<p>
37+
Time diff:{" "}
38+
<span className="serverTime">{/* Replace with the value */}</span>
39+
</p>
5140
</div>
5241

53-
<div className={styles.grid}>
54-
<a
55-
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
56-
className={styles.card}
57-
target="_blank"
58-
rel="noopener noreferrer"
59-
>
60-
<h2>
61-
Docs <span>-&gt;</span>
62-
</h2>
63-
<p>
64-
Find in-depth information about Next.js features and&nbsp;API.
65-
</p>
66-
</a>
67-
68-
<a
69-
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
70-
className={styles.card}
71-
target="_blank"
72-
rel="noopener noreferrer"
73-
>
74-
<h2>
75-
Learn <span>-&gt;</span>
76-
</h2>
77-
<p>
78-
Learn about Next.js in an interactive course with&nbsp;quizzes!
79-
</p>
80-
</a>
81-
82-
<a
83-
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
84-
className={styles.card}
85-
target="_blank"
86-
rel="noopener noreferrer"
87-
>
88-
<h2>
89-
Templates <span>-&gt;</span>
90-
</h2>
91-
<p>
92-
Discover and deploy boilerplate example Next.js&nbsp;projects.
93-
</p>
94-
</a>
95-
96-
<a
97-
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
98-
className={styles.card}
99-
target="_blank"
100-
rel="noopener noreferrer"
101-
>
102-
<h2>
103-
Deploy <span>-&gt;</span>
104-
</h2>
105-
<p>
106-
Instantly deploy your Next.js site to a shareable URL
107-
with&nbsp;Vercel.
108-
</p>
109-
</a>
42+
<div>
43+
<button onClick={moveToTaskManager}>Go to task manager</button>
11044
</div>
11145
</main>
11246
</>
113-
)
47+
);
11448
}

src/pages/tasks.tsx

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import React, { ChangeEvent, useRef } from 'react';
2+
3+
interface Task {
4+
id: number,
5+
title: string,
6+
completed: boolean,
7+
}
8+
9+
const TaskManager = () => {
10+
// const createTaskRef = ...:
11+
// const {
12+
// tasks,
13+
// searchTask,
14+
// addTask,
15+
// updateTask,
16+
// deleteTask,
17+
// setSearchTask,
18+
// } = useTaskManager();
19+
20+
const handleAddTask = () => {
21+
const title = ""; // Replace with the value in the createTaskRef
22+
const newTask = {
23+
id: Date.now(),
24+
title,
25+
completed: false,
26+
};
27+
// addTask(newTask);
28+
};
29+
30+
const handleUpdateTask = (taskId: number, updatedTask: Task) => {
31+
// updateTask(taskId, updatedTask);
32+
};
33+
34+
const handleDeleteTask = (taskId: number) => {
35+
// deleteTask(taskId);
36+
};
37+
38+
const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {
39+
// setSearchTask(e.target.value);
40+
};
41+
42+
// See! I already give you everything!
43+
// const filteredTasks = tasks.filter((task) =>
44+
// task.title.toLowerCase().includes(searchTask.toLowerCase())
45+
// );
46+
47+
return (
48+
<div>
49+
<h1>Task Manager</h1>
50+
51+
<input type="text" /*ref={}*//>
52+
53+
<button onClick={handleAddTask}>Add Task</button>
54+
55+
<input type="text" onChange={handleSearch} placeholder="Search Task" />
56+
57+
<ul>
58+
{/*
59+
{filteredTasks.map((task) => (
60+
<li key={task.id}>
61+
<input
62+
type="text"
63+
value={task.title}
64+
onChange={(e) =>
65+
handleUpdateTask(task.id, { title: e.target.value })
66+
}
67+
/>
68+
<button onClick={() => handleDeleteTask(task.id)}>Delete</button>
69+
</li>
70+
))}
71+
*/}
72+
</ul>
73+
</div>
74+
);
75+
};
76+
77+
export default TaskManager;

src/store/useTaskManager.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const useTaskManager = () => {
2+
3+
}
4+
5+
export {
6+
useTaskManager
7+
}

src/utils/index.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
Pauses the execution for a specified amount of time.
3+
@param {number} milliseconds - The duration to wait in milliseconds.
4+
@returns {Promise<void>} A Promise that resolves after the specified duration.
5+
*/
6+
const wait = (milliseconds: number) => {
7+
return new Promise((resolve) => {
8+
setTimeout(resolve, milliseconds);
9+
});
10+
};
11+
12+
export { wait };

0 commit comments

Comments
 (0)