diff --git a/app/(tabs)/(add)/_layout.tsx b/app/(tabs)/(add)/_layout.tsx
index 6b7abee..1209652 100644
--- a/app/(tabs)/(add)/_layout.tsx
+++ b/app/(tabs)/(add)/_layout.tsx
@@ -5,7 +5,6 @@ export default function RootoLayout() {
return (
diff --git a/app/(tabs)/(exercice)/ExerciceScreen.tsx b/app/(tabs)/(exercice)/ExerciceScreen.tsx
deleted file mode 100644
index e72b0f5..0000000
--- a/app/(tabs)/(exercice)/ExerciceScreen.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import {FlatList, Text, View} from "react-native";
-import React from "react";
-import HeaderProfileComponent from "@/components/HeaderProfileComponent";
-import Screen from "@/components/ui/Screen";
-import WorkoutCardComponent from "@/components/WorkoutCardComponent";
-import {useSession} from "@/ctx";
-import {Workout} from "@/model/Workout";
-
-export default function ExerciceScreen() {
- const [text, onChangeText] = React.useState("");
- const exercise = [new Workout("Développé couché", 25,"8 Series Workout", 412, "assets/images/Sigma-2.png","Intense" ),
- new Workout("Curl halterné", 30, "8 Series Workout", 342, "assets/images/Sigma.jpg","Medium" ),
- new Workout("Tirage Vertival", 29, "8 Series Workout", 793, "assets/images/Sigma.jpg","Easy" )];
-
- return (
-
-
-
-
-
-
-
- Séance du jour
-
-
- >
- }
- data={exercise}
- className="h-full"
- renderItem={({ item }: { item: Workout }) =>
-
-
-
- }
- />
-
- );
-}
\ No newline at end of file
diff --git a/app/(tabs)/(exercice)/ExercicesScreen.tsx b/app/(tabs)/(exercice)/ExercicesScreen.tsx
new file mode 100644
index 0000000..bbe405c
--- /dev/null
+++ b/app/(tabs)/(exercice)/ExercicesScreen.tsx
@@ -0,0 +1,47 @@
+import {FlatList, SafeAreaView, Text, View} from "react-native";
+import React from "react";
+import HeaderProfileComponent from "@/components/HeaderProfileComponent";
+import Screen from "@/components/ui/Screen";
+import WorkoutCardComponent from "@/components/WorkoutCardComponent";
+import {useSession} from "@/ctx";
+import {Workout} from "@/model/Workout";
+import LinearTimer from "react-native-linear-timer";
+
+export default function ExercicesScreen() {
+ const [text, onChangeText] = React.useState("");
+ const exercise = [new Workout("Développé couché", 25,"8 Series Workout", 412, "assets/images/Sigma-2.png","Intense" ),
+ new Workout("Curl halterné", 30, "8 Series Workout", 342, "assets/images/Sigma.jpg","Medium" ),
+ new Workout("Tirage Vertival", 29, "8 Series Workout", 793, "assets/images/Sigma.jpg","Easy" )];
+
+ return (
+
+
+
+
+
+
+
+
+ Séance du jour
+
+
+ >
+
+ }
+ data={exercise}
+ className="h-full"
+ renderItem={({ item }: { item: Workout }) =>
+
+
+
+
+ }
+ />
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/app/(tabs)/(exercice)/WorkoutScreen.tsx b/app/(tabs)/(exercice)/WorkoutScreen.tsx
new file mode 100644
index 0000000..f11ad98
--- /dev/null
+++ b/app/(tabs)/(exercice)/WorkoutScreen.tsx
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import LinearTimer from 'react-native-linear-timer';
+import {Button, Image, ImageBackground, SafeAreaView, Text, TouchableOpacity, View} from "react-native";
+import Screen from "@/components/ui/Screen";
+import {Background} from "@react-navigation/elements";
+import {AntDesign} from "@expo/vector-icons";
+import {router, useRouter} from "expo-router";
+import WelcomeComponent from "@/components/WelcomeComponent";
+import WorkoutPresentationComponent from "@/components/WorkoutPresentationComponent";
+
+
+export default function WorkoutScreen() {
+
+ const router = useRouter();
+ return (
+
+
+
+
+ )
+
+
+}
\ No newline at end of file
diff --git a/app/(tabs)/(exercice)/_layout.tsx b/app/(tabs)/(exercice)/_layout.tsx
index b03bdcf..278487e 100644
--- a/app/(tabs)/(exercice)/_layout.tsx
+++ b/app/(tabs)/(exercice)/_layout.tsx
@@ -5,9 +5,13 @@ export default function RootoLayout() {
return (
-
+ }}
+ initialRouteName={"ExercicesScreen"}
+ >
+
+
+
+
);
diff --git a/app/(tabs)/(help)/_layout.tsx b/app/(tabs)/(help)/_layout.tsx
index 6da6271..3d0f8ca 100644
--- a/app/(tabs)/(help)/_layout.tsx
+++ b/app/(tabs)/(help)/_layout.tsx
@@ -6,7 +6,6 @@ export default function RootoLayout() {
return (
diff --git a/app/(tabs)/(home)/HomeScreen.tsx b/app/(tabs)/(home)/HomeScreen.tsx
index a6d4f20..8ccf479 100644
--- a/app/(tabs)/(home)/HomeScreen.tsx
+++ b/app/(tabs)/(home)/HomeScreen.tsx
@@ -9,11 +9,12 @@ import {Workout} from "@/model/Workout";
export default function HomeScreen() {
- const exercise = new Workout("Développé couché", 25,"8 Series Workout", 412, "assets/images/Sigma-2.png","Intense" );
+ const exercise = new Workout("Faire caca par terre", 25,"8 Series Workout", 412, "assets/images/Sigma-2.png","Intense" );
return (
+
-
+
@@ -31,7 +32,7 @@ export default function HomeScreen() {
-
+
Workout
@@ -54,8 +55,7 @@ export default function HomeScreen() {
-
-
+
);
}
\ No newline at end of file
diff --git a/app/(tabs)/(home)/_layout.tsx b/app/(tabs)/(home)/_layout.tsx
index c7b1cd6..07cd7de 100644
--- a/app/(tabs)/(home)/_layout.tsx
+++ b/app/(tabs)/(home)/_layout.tsx
@@ -5,7 +5,6 @@ export default function RootoLayout() {
return (
diff --git a/app/(tabs)/(profil)/_layout.tsx b/app/(tabs)/(profil)/_layout.tsx
index 4f3fd23..104e7e8 100644
--- a/app/(tabs)/(profil)/_layout.tsx
+++ b/app/(tabs)/(profil)/_layout.tsx
@@ -5,7 +5,6 @@ export default function RootoLayout() {
return (
diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx
index e6ee3da..f6ff288 100644
--- a/app/(tabs)/_layout.tsx
+++ b/app/(tabs)/_layout.tsx
@@ -1,4 +1,4 @@
-import { Redirect, Tabs } from "expo-router";
+import {Redirect, Tabs, useRouter} from "expo-router";
import { useSession } from "@/ctx";
import React from "react";
import { AntDesign, Ionicons, MaterialIcons } from "@expo/vector-icons";
@@ -7,6 +7,7 @@ import Loading from "../loading";
export default function TabBarLayout() {
const { session, isLoading } = useSession();
+ const router = useRouter()
const sizeIcon = 24;
// You can keep the splash screen open, or render a loading screen like we do here.
if (isLoading) {
diff --git a/app/+not-found.tsx b/app/+not-found.tsx
index d075182..7b07a8a 100644
--- a/app/+not-found.tsx
+++ b/app/+not-found.tsx
@@ -1,15 +1,17 @@
-import { Link, Stack, usePathname } from 'expo-router';
-import {StyleSheet, Text, View} from 'react-native';
+import {Link, router, Stack, usePathname, useRouter} from 'expo-router';
+import {Button, StyleSheet, Text, View} from 'react-native';
export default function NotFoundScreen() {
const pathname = usePathname();
+ const router = useRouter();
return (
<>
This screen {pathname} doesn't exist: {pathname}
+
>
diff --git a/assets/images/04-MM-IA-Regression-Classification.pdf b/assets/images/04-MM-IA-Regression-Classification.pdf
new file mode 100644
index 0000000..0ba00aa
Binary files /dev/null and b/assets/images/04-MM-IA-Regression-Classification.pdf differ
diff --git a/assets/images/sigmaC.jpeg b/assets/images/sigmaC.jpeg
new file mode 100644
index 0000000..433a917
Binary files /dev/null and b/assets/images/sigmaC.jpeg differ
diff --git a/components/LinearProgressBar.tsx b/components/LinearProgressBar.tsx
new file mode 100644
index 0000000..6431193
--- /dev/null
+++ b/components/LinearProgressBar.tsx
@@ -0,0 +1,58 @@
+import React, { useEffect, useRef, useState } from 'react';
+import { View, Text, Animated, TouchableOpacity } from 'react-native';
+
+export default function LinearProgressBar({ duration = 10 }) {
+ const [timeLeft, setTimeLeft] = useState(duration);
+ const [isRunning, setIsRunning] = useState(false);
+ const progress = useRef(new Animated.Value(0)).current;
+ const intervalRef = useRef(null);
+
+ const startAnimation = () => {
+ setIsRunning(true);
+ progress.setValue(0);
+ setTimeLeft(duration);
+
+ Animated.timing(progress, {
+ toValue: 1,
+ duration: duration * 1000,
+ useNativeDriver: false,
+ }).start(() => setIsRunning(false));
+
+ //@ts-ignore
+ intervalRef.current = setInterval(() => {
+ setTimeLeft((prev) => (prev > 0 ? prev - 1 : 0));
+ }, 1000);
+ };
+
+ useEffect(() => {
+ //@ts-ignore
+ return () => clearInterval(intervalRef.current);
+ }, []);
+
+ const progressWidth = progress.interpolate({
+ inputRange: [0, 1],
+ outputRange: ["0%", "100%"],
+ });
+
+ return (
+
+ Temps restant : {timeLeft}s
+
+
+
+
+
+
+ {isRunning ? 'En cours...' : 'Play'}
+
+
+
+ );
+}
diff --git a/components/WorkoutCardComponent.tsx b/components/WorkoutCardComponent.tsx
index 029d922..68d5d0c 100644
--- a/components/WorkoutCardComponent.tsx
+++ b/components/WorkoutCardComponent.tsx
@@ -2,6 +2,7 @@ import {ImageBackground, Text, TouchableOpacity, View} from "react-native";
import React from "react";
import {AntDesign, MaterialCommunityIcons} from "@expo/vector-icons";
import {Workout} from "@/model/Workout";
+import {Link, useRouter} from "expo-router";
interface WorkoutCardComponentProps {
exercise: Workout,
@@ -15,19 +16,15 @@ export default function WorkoutCardComponent({exercise, height, background}: Wor
const style = () => {
- return `rounded-2xl overflow-hidden ${background ?? "bg-black"}`
+ return `h-full rounded-2xl overflow-hidden ${background ?? "bg-black"}`
}
const styleImage = () => {
- return `w-full h `
+ return `w-full h-full `
}
-
- console.log(styleImage())
-
- console.log(style())
-
+ const router = useRouter();
return (
-
+
-
-
+ {
+ router.push("/WorkoutScreen");
+ }}>
diff --git a/components/WorkoutPresentationComponent.tsx b/components/WorkoutPresentationComponent.tsx
new file mode 100644
index 0000000..f9fcad2
--- /dev/null
+++ b/components/WorkoutPresentationComponent.tsx
@@ -0,0 +1,28 @@
+import {ImageBackground, TouchableOpacity, View} from "react-native";
+import Screen from "@/components/ui/Screen";
+import * as React from "react";
+import {Ionicons} from "@expo/vector-icons";
+import {useRouter} from "expo-router";
+import LinearProgressBar from "@/components/LinearProgressBar";
+
+export default function WorkoutPresentationComponent() {
+ const router = useRouter()
+ return (
+
+
+
+ {
+ router.replace("/ExercicesScreen");
+ }}>
+
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 7df089d..17898f0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -37,6 +37,7 @@
"react-native": "0.76.6",
"react-native-gesture-handler": "^2.20.2",
"react-native-gifted-charts": "^1.4.54",
+ "react-native-linear-timer": "^1.4.0",
"react-native-reanimated": "~3.16.1",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "^4.4.0",
@@ -12287,10 +12288,21 @@
"react-native": ">=0.73.0"
}
},
+ "node_modules/react-native-linear-timer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/react-native-linear-timer/-/react-native-linear-timer-1.4.0.tgz",
+ "integrity": "sha512-osZqS4toVi4JGbq4xVW0DmLGXyElMltwYjMaqACSkaR7WC8mYPnKckKPBRlVjHrTnrAgeZoGm2t9UbXRGX3jOQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "prop-types": "*",
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/react-native-reanimated": {
- "version": "3.16.6",
- "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.16.6.tgz",
- "integrity": "sha512-jPbAfLF5t8+UCKFTO+LeOY+OmAcDP5SsAfqINvNQz5GFGvoO7UebxujjtY58CmpZNH6c3SQ514FF9//mZDpo/g==",
+ "version": "3.16.7",
+ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.16.7.tgz",
+ "integrity": "sha512-qoUUQOwE1pHlmQ9cXTJ2MX9FQ9eHllopCLiWOkDkp6CER95ZWeXhJCP4cSm6AD4jigL5jHcZf/SkWrg8ttZUsw==",
"license": "MIT",
"dependencies": {
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
diff --git a/package.json b/package.json
index c090dc4..9e47516 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,7 @@
"react-native": "0.76.6",
"react-native-gesture-handler": "^2.20.2",
"react-native-gifted-charts": "^1.4.54",
+ "react-native-linear-timer": "^1.4.0",
"react-native-reanimated": "~3.16.1",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "^4.4.0",