Merge version_2 into main
Merge version_2 into main
This commit was merged in pull request #14.
This commit is contained in:
@@ -13,76 +13,29 @@ import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
|
||||
import ContactText from '@/components/sections/contact/ContactText';
|
||||
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
|
||||
import { Activity, Apple, Brain, Dumbbell, Heart, Target, Zap, Users, Star, TrendingDown, TrendingUp } from 'lucide-react';
|
||||
import { useWorkoutStorage } from '@/hooks/useWorkoutStorage';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
export default function LandingPage() {
|
||||
const { metrics: userMetrics, saveWorkout, getWorkoutsByType } = useWorkoutStorage();
|
||||
const [displayMetrics, setDisplayMetrics] = useState([
|
||||
const displayMetrics = [
|
||||
{ id: "1", value: "10.000+", description: "Passos diários rastreados em tempo real com motivação visual de progresso." },
|
||||
{ id: "2", value: "500 kg", description: "Volume total de peso levantado monitorado com progressão semanal automática." },
|
||||
{ id: "3", value: "150+ km", description: "Distância corrida mapeada com GPS, ritmo calculado e calorias precisas." },
|
||||
{ id: "4", value: "42 dias", description: "Sequência de treinos consistentes com badges de dedicação desbloqueados." }
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
if (userMetrics) {
|
||||
const updatedMetrics = [
|
||||
{
|
||||
id: "1", value: userMetrics.totalDistance > 0 ? `${Math.round(userMetrics.totalDistance).toLocaleString()}+` : "10.000+", description: "Passos diários rastreados em tempo real com motivação visual de progresso."
|
||||
},
|
||||
{
|
||||
id: "2", value: userMetrics.totalWeight > 0 ? `${Math.round(userMetrics.totalWeight)} kg` : "500 kg", description: "Volume total de peso levantado monitorado com progressão semanal automática."
|
||||
},
|
||||
{
|
||||
id: "3", value: userMetrics.totalDistance > 0 ? `${Math.round(userMetrics.totalDistance)}+ km` : "150+ km", description: "Distância corrida mapeada com GPS, ritmo calculado e calorias precisas."
|
||||
},
|
||||
{
|
||||
id: "4", value: userMetrics.consistency > 0 ? `${userMetrics.consistency} dias` : "42 dias", description: "Sequência de treinos consistentes com badges de dedicação desbloqueados."
|
||||
}
|
||||
];
|
||||
setDisplayMetrics(updatedMetrics);
|
||||
}
|
||||
}, [userMetrics]);
|
||||
];
|
||||
|
||||
const handleCardioInteraction = (data: any) => {
|
||||
saveWorkout({
|
||||
type: 'cardio',
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
data: { ...data, timestamp: Date.now() }
|
||||
});
|
||||
console.log('Cardio interaction:', data);
|
||||
};
|
||||
|
||||
const handleTrainingInteraction = (data: any) => {
|
||||
saveWorkout({
|
||||
type: 'training',
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
data: { ...data, timestamp: Date.now() }
|
||||
});
|
||||
console.log('Training interaction:', data);
|
||||
};
|
||||
|
||||
const handleWorkoutMode = (productId: string, productName: string) => {
|
||||
saveWorkout({
|
||||
type: 'training',
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
data: {
|
||||
workout: productName,
|
||||
startTime: Date.now(),
|
||||
productId,
|
||||
}
|
||||
});
|
||||
console.log('Workout mode:', productId, productName);
|
||||
};
|
||||
|
||||
const handleNutritionSelect = (planId: string, planName: string) => {
|
||||
saveWorkout({
|
||||
type: 'nutrition',
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
data: {
|
||||
plan: planName,
|
||||
planId,
|
||||
selectedAt: Date.now(),
|
||||
}
|
||||
});
|
||||
console.log('Nutrition select:', planId, planName);
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { useWorkoutStorage } from '@/hooks/useWorkoutStorage';
|
||||
import FeatureCardTwentyFive from './FeatureCardTwentyFive';
|
||||
import { ReactNode } from 'react';
|
||||
|
||||
interface FeatureCardTwentyFiveWithSavingProps {
|
||||
title: string;
|
||||
@@ -34,20 +32,7 @@ export function FeatureCardTwentyFiveWithSaving({
|
||||
onFeatureInteraction,
|
||||
workoutType,
|
||||
}: FeatureCardTwentyFiveWithSavingProps) {
|
||||
const { saveWorkout } = useWorkoutStorage();
|
||||
|
||||
const handleFeatureInteraction = (featureIndex: number, data?: any) => {
|
||||
if (workoutType && data) {
|
||||
const workoutData = {
|
||||
type: workoutType,
|
||||
date: new Date().toISOString().split('T')[0],
|
||||
data: {
|
||||
feature: features[featureIndex]?.title,
|
||||
...data,
|
||||
},
|
||||
};
|
||||
saveWorkout(workoutData as any);
|
||||
}
|
||||
onFeatureInteraction?.(data);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { useWorkoutStorage } from '@/hooks/useWorkoutStorage';
|
||||
import PricingCardOne from './PricingCardOne';
|
||||
|
||||
interface NutritionPlan {
|
||||
@@ -35,8 +34,6 @@ export function PricingCardOneWithSaving({
|
||||
useInvertedBackground,
|
||||
onNutritionPlanSelected,
|
||||
}: PricingCardOneWithSavingProps) {
|
||||
const { saveWorkout } = useWorkoutStorage();
|
||||
|
||||
const handlePlanSelection = (planId: string, planBadge: string) => {
|
||||
const nutritionData = {
|
||||
type: 'nutrition' as const,
|
||||
@@ -47,18 +44,11 @@ export function PricingCardOneWithSaving({
|
||||
selectedAt: Date.now(),
|
||||
},
|
||||
};
|
||||
saveWorkout(nutritionData as any);
|
||||
onNutritionPlanSelected?.(nutritionData);
|
||||
};
|
||||
|
||||
const enhancedPlans = plans.map(plan => ({
|
||||
...plan,
|
||||
buttons: plan.buttons || [
|
||||
{
|
||||
text: 'Selecionar',
|
||||
onClick: () => handlePlanSelection(plan.id, plan.badge),
|
||||
},
|
||||
],
|
||||
}));
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { useWorkoutStorage } from '@/hooks/useWorkoutStorage';
|
||||
import ProductCardOne from './ProductCardOne';
|
||||
|
||||
interface ProductCardOneWithSavingProps {
|
||||
@@ -48,8 +47,6 @@ export function ProductCardOneWithSaving({
|
||||
gridVariant,
|
||||
onWorkoutStart,
|
||||
}: ProductCardOneWithSavingProps) {
|
||||
const { saveWorkout } = useWorkoutStorage();
|
||||
|
||||
const handleProductClick = (productId: string, productName: string) => {
|
||||
const workoutData = {
|
||||
type: 'training' as const,
|
||||
@@ -60,7 +57,6 @@ export function ProductCardOneWithSaving({
|
||||
productId,
|
||||
},
|
||||
};
|
||||
saveWorkout(workoutData as any);
|
||||
onWorkoutStart?.(workoutData);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user