Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions src/hooks/useLocalStorage.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,27 @@
const useLocalStorage = () => {
import { useState, useEffect } from 'react';

}
type LocalStorageKey = string;

export {
useLocalStorage
}
type LocalStorageValue = string | null;

const useLocalStorage = (
key: LocalStorageKey,
initialValue: LocalStorageValue
): [LocalStorageValue, (value: LocalStorageValue) => void] => {
const [value, setValue] = useState<LocalStorageValue>(() => {
const storedValue = localStorage.getItem(key);
return storedValue !== null ? storedValue : initialValue;
});

useEffect(() => {
if (value !== null) {
localStorage.setItem(key, value);
} else {
localStorage.removeItem(key);
}
}, [key, value]);

return [value, setValue];
};

export default useLocalStorage;
Empty file added src/pages/axampde.js
Empty file.
45 changes: 42 additions & 3 deletions src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { GetServerSideProps } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";

/**
Calculates the time difference between the server time and client time.
Expand All @@ -9,12 +11,47 @@ import { useRouter } from "next/router";
*/
const calculateTimeDifference = (server: Date, client: Date) => {};

interface TimeProps {
serverData: number;
}

export const getServerSideProps: GetServerSideProps<TimeProps> = async () => {
const serverTimesDate = new Date();
const serverTimes = serverTimesDate.getTime()
return {
props: {
serverData: serverTimes,
},
};
};


const Home: React.FC<TimeProps> = ({serverData}) => {
//let serverTimes:number = serverData;

export default function Home() {
const [timeDifference, setTimeDifference] = useState<number|null>(null);
const router = useRouter();
const moveToTaskManager = () => {
router.push("/tasks");
}
useEffect(()=>{
const currentTime = new Date();
const currentTimeNumber = currentTime.getTime()
if (typeof serverData == "number") {
setTimeDifference(Math.abs(serverData-currentTimeNumber))
}
},[serverData])

const formatTimeDifference = (difference:number) => {
// Convertir la différence en jours, heures, minutes et secondes
const seconds = Math.floor(difference / 1000) % 60;
const minutes = Math.floor(difference / (1000 * 60)) % 60;
const hours = Math.floor(difference / (1000 * 60 * 60)) % 24;
const days = Math.floor(difference / (1000 * 60 * 60 * 24));

return ` ${days} jours, ${hours} heures, ${minutes} minutes, ${seconds} secondes`;
};

return (
<>
<Head>
Expand All @@ -29,13 +66,13 @@ export default function Home() {
{/* Display here the server time (DD-MM-AAAA HH:mm)*/}
<p>
Server time:{" "}
<span className="serverTime">{/* Replace with the value */}</span>
<span className="serverTime">{" " + serverData!=null ? formatTimeDifference(serverData):" " }</span>
</p>

{/* Display here the time difference between the server side and the client side */}
<p>
Time diff:{" "}
<span className="serverTime">{/* Replace with the value */}</span>
<span className="serverTime">{" " + timeDifference == null ?" c'est null ": formatTimeDifference(timeDifference??0)}</span>
</p>
</div>

Expand All @@ -46,3 +83,5 @@ export default function Home() {
</>
);
}

export default Home;
42 changes: 17 additions & 25 deletions src/pages/tasks.tsx
Original file line number Diff line number Diff line change
@@ -1,74 +1,66 @@
import React, { ChangeEvent, useRef } from 'react';
import useTaskManager from '@/store/useTaskManager';
import React, { ChangeEvent, useRef, useState } from 'react';

interface Task {
export interface Task {
id: number,
title: string,
completed: boolean,
}

const TaskManager = () => {
// const createTaskRef = ...:
// const {
// tasks,
// searchTask,
// addTask,
// updateTask,
// deleteTask,
// setSearchTask,
// } = useTaskManager();
const {tasks, searchTask, addTask , setSearchTask, deleteTask, updateTask} = useTaskManager();
const [titleValue, setTitleValue] = useState('')
//const createTaskRef = ...:

const handleAddTask = () => {
const title = ""; // Replace with the value in the createTaskRef
const title = titleValue; // Replace with the value in the createTaskRef
const newTask = {
id: Date.now(),
title,
completed: false,
};
// addTask(newTask);
addTask(newTask);
};

const handleUpdateTask = (taskId: number, updatedTask: Task) => {
// updateTask(taskId, updatedTask);
updateTask(taskId, updatedTask);
};

const handleDeleteTask = (taskId: number) => {
// deleteTask(taskId);
deleteTask(taskId);
};

const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {
// setSearchTask(e.target.value);
setSearchTask(e.target.value);
};

// See! I already give you everything!
// const filteredTasks = tasks.filter((task) =>
// task.title.toLowerCase().includes(searchTask.toLowerCase())
// );

const filteredTasks = tasks.filter((task) =>
task.title.toLowerCase().includes(searchTask.toLowerCase())
);
return (
<div>
<h1>Task Manager</h1>

<input type="text" /*ref={}*//>
<input type="text" value={titleValue} onChange={(e)=>setTitleValue(e.target.value)}/>

<button onClick={handleAddTask}>Add Task</button>

<input type="text" onChange={handleSearch} placeholder="Search Task" />

<ul>
{/*
{filteredTasks.map((task) => (
{filteredTasks.map((task:Task) => (
<li key={task.id}>
<input
type="text"
value={task.title}
onChange={(e) =>
handleUpdateTask(task.id, { title: e.target.value })
handleUpdateTask(task.id, {...task, title: e.target.value })
}
/>
<button onClick={() => handleDeleteTask(task.id)}>Delete</button>
</li>
))}
*/}
</ul>
</div>
);
Expand Down
44 changes: 40 additions & 4 deletions src/store/useTaskManager.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,43 @@
const useTaskManager = () => {
import { Task } from '@/pages/tasks';
import { create } from 'zustand';

const useTaskManager = create<DateState>((set, get) => ({
tasks: [],
addTask: (newTache: Task) =>
set((state) => ({ ...state, tasks: [...state.tasks,newTache]})),
idUser: null,
searchTask: "",
setSearchTask: (newSearchTache: string)=>
set((state) => ({ ...state, searchTask: newSearchTache})),
deleteTask: (idTask: number) =>{
let tastsNow = get().tasks;
const index = tastsNow.findIndex(item => item.id === idTask);
tastsNow.splice(index, 1)
set((state) => ({ ...state, tasks: tastsNow}))},
updateTask: (taskId: number, updatedTask:Task) =>{
let tastsNow = get().tasks;
const index = tastsNow.findIndex(item => item.id === taskId);
tastsNow[index] = updatedTask
set((state) => ({ ...state, tasks: tastsNow}))},
}))

export type DateState = {
tasks: Task[];
addTask: (newTache: Task) => void;
searchTask: string;
setSearchTask: (newSearchTache: string) => void;
deleteTask: (idTask: number) => void;
updateTask: (taskId: number, updatedTask:Task)=>void
}

export {
useTaskManager
}
export default useTaskManager;


/*
//use:
import useStore from '@/zustand/useChannel';
export default function SideBar() {
const { idChannel, idUser, setIdChannel, setIdUser } = useStore();
return <></>
}
*/