AI Plan generation enhanced
This commit is contained in:
@@ -181,7 +181,7 @@ const SortablePlanStep: React.FC<SortablePlanStepProps> = ({ step, index, toggle
|
||||
const Plans: React.FC<PlansProps> = ({ lang }) => {
|
||||
const { currentUser } = useAuth();
|
||||
const userId = currentUser?.id || '';
|
||||
const { plans, savePlan, deletePlan, refreshData } = useSession();
|
||||
const { plans, sessions, savePlan, deletePlan, refreshData } = useSession();
|
||||
const { startSession } = useActiveWorkout();
|
||||
|
||||
const [isEditing, setIsEditing] = useState(false);
|
||||
@@ -226,7 +226,9 @@ const Plans: React.FC<PlansProps> = ({ lang }) => {
|
||||
const [aiLoading, setAILoading] = useState(false);
|
||||
const [aiError, setAIError] = useState<string | null>(null);
|
||||
const [aiDuration, setAIDuration] = useState(60); // Default 1 hour in minutes
|
||||
const [aiEquipment, setAIEquipment] = useState<'none' | 'essentials' | 'free_weights' | 'full_gym'>('full_gym');
|
||||
const [aiEquipment, setAIEquipment] = useState<'none' | 'essentials' | 'free_weights' | 'full_gym'>('none');
|
||||
const [aiLevel, setAILevel] = useState<'beginner' | 'intermediate' | 'advanced'>('intermediate');
|
||||
const [aiIntensity, setAIIntensity] = useState<'low' | 'moderate' | 'high'>('moderate');
|
||||
const [generatedPlanPreview, setGeneratedPlanPreview] = useState<{
|
||||
name: string;
|
||||
description: string;
|
||||
@@ -417,7 +419,17 @@ const Plans: React.FC<PlansProps> = ({ lang }) => {
|
||||
? aiPrompt
|
||||
: (lang === 'ru' ? 'Создай план тренировки' : 'Create a workout plan');
|
||||
|
||||
const aiPlan = await generateWorkoutPlan(prompt, availableNames, lang, aiDuration, aiEquipment);
|
||||
const aiPlan = await generateWorkoutPlan(
|
||||
prompt,
|
||||
availableNames,
|
||||
lang,
|
||||
aiDuration,
|
||||
aiEquipment,
|
||||
aiLevel,
|
||||
aiIntensity,
|
||||
sessions,
|
||||
currentUser?.profile
|
||||
);
|
||||
setGeneratedPlanPreview(aiPlan);
|
||||
} catch (err: any) {
|
||||
console.error('AI plan generation error:', err);
|
||||
@@ -488,7 +500,9 @@ const Plans: React.FC<PlansProps> = ({ lang }) => {
|
||||
// Reset state and close
|
||||
setAIPrompt('');
|
||||
setAIDuration(60);
|
||||
setAIEquipment('full_gym');
|
||||
setAIEquipment('none');
|
||||
setAILevel('intermediate');
|
||||
setAIIntensity('moderate');
|
||||
setGeneratedPlanPreview(null);
|
||||
setShowAISheet(false);
|
||||
setFabMenuOpen(false);
|
||||
@@ -813,6 +827,46 @@ const Plans: React.FC<PlansProps> = ({ lang }) => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Level Selector */}
|
||||
<div className="space-y-2">
|
||||
<label className="text-sm font-medium text-on-surface">{t('level', lang)}</label>
|
||||
<div className="flex gap-2">
|
||||
{(['beginner', 'intermediate', 'advanced'] as const).map((lvl) => (
|
||||
<button
|
||||
key={lvl}
|
||||
onClick={() => setAILevel(lvl)}
|
||||
disabled={aiLoading}
|
||||
className={`flex-1 p-2 rounded-xl text-sm font-medium transition-all ${aiLevel === lvl
|
||||
? 'bg-primary text-on-primary'
|
||||
: 'bg-surface-container-high text-on-surface hover:bg-surface-container-highest'
|
||||
}`}
|
||||
>
|
||||
{t(`level_${lvl}` as any, lang)}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Intensity Selector */}
|
||||
<div className="space-y-2">
|
||||
<label className="text-sm font-medium text-on-surface">{t('intensity', lang)}</label>
|
||||
<div className="flex gap-2">
|
||||
{(['low', 'moderate', 'high'] as const).map((int) => (
|
||||
<button
|
||||
key={int}
|
||||
onClick={() => setAIIntensity(int)}
|
||||
disabled={aiLoading}
|
||||
className={`flex-1 p-2 rounded-xl text-sm font-medium transition-all ${aiIntensity === int
|
||||
? 'bg-primary text-on-primary'
|
||||
: 'bg-surface-container-high text-on-surface hover:bg-surface-container-highest'
|
||||
}`}
|
||||
>
|
||||
{t(`intensity_${int}` as any, lang)}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Additional Requirements */}
|
||||
<div className="space-y-2">
|
||||
<label className="text-sm font-medium text-on-surface">
|
||||
|
||||
Reference in New Issue
Block a user