2025-06-26 16:04:42 +08:00

128 lines
4.6 KiB
TypeScript

import { Steps } from '@/app/(tabs)/user-message';
import ChoiceSvg from '@/assets/icons/svg/choice.svg';
import { ThemedText } from '@/components/ThemedText';
import { useState } from 'react';
import { TouchableOpacity, View } from 'react-native';
interface Props {
setSteps: (steps: Steps) => void;
}
type ChoiceOption = {
id: string;
emoji: string;
label: string;
description: string;
};
export default function Choice({ setSteps }: Props) {
const [selectedOption, setSelectedOption] = useState<string[]>([]);
const [isLoading, setIsLoading] = useState(false);
const handleContinue = () => {
if (!selectedOption) return;
setIsLoading(true);
// Simulate API call
setTimeout(() => {
setIsLoading(false);
setSteps('done');
}, 500);
};
const options: ChoiceOption[] = [
{
id: 'wakeup',
emoji: '⏰',
label: 'Wake Up',
description: 'Start your day right with a gentle wake-up'
},
{
id: 'sleep',
emoji: '😴',
label: 'Sleep',
description: 'Drift off with calming sounds'
},
{
id: 'focus',
emoji: '🎯',
label: 'Focus',
description: 'Enhance your concentration'
},
{
id: 'relax',
emoji: '🧘',
label: 'Relax',
description: 'Unwind and de-stress'
},
{
id: 'relax1',
emoji: '🧘',
label: 'Relax1',
description: 'Unwind and de-stress'
},
{
id: 'relax11',
emoji: '🧘',
label: 'Relax11',
description: 'Unwind and de-stress'
},
];
return (
<View className="h-full bg-textPrimary overflow-y-auto">
{/* Fixed Header */}
<View className="p-[2rem] pb-0">
<View className="items-center flex flex-col gap-[2rem]">
<ChoiceSvg />
<ThemedText className="text-3xl !text-white text-center font-semibold">
Every memory matters.
</ThemedText>
<ThemedText className="text-base !text-white text-center">
Select a few to help Memo create better video capsules for you
</ThemedText>
</View>
</View>
{/* Scrollable Content */}
<View className="flex-1">
<View className="p-[2rem] pb-0">
<View className="gap-4">
{options.map((option) => (
<TouchableOpacity
key={option.id}
className={`p-[1rem] rounded-full bg-[#FFF8DE] border-2 ${selectedOption.includes(option.id) ? 'border-bgPrimary' : 'border-transparent'} w-full flex items-center justify-center`}
onPress={() => {
// 如果存在则删除,没有则添加,多选
if (selectedOption.includes(option.id)) {
// 剔除
setSelectedOption((prev) => prev.filter((id) => id !== option.id));
} else {
// 添加
setSelectedOption((prev) => ([...prev, option.id]));
}
}}
>
<ThemedText className="text-lg font-semibold !text-textTertiary text-center">
{option.label}
</ThemedText>
</TouchableOpacity>
))}
{/* Next Button */}
<View className="mt-8 mb-4">
<TouchableOpacity
className={`w-full bg-white rounded-full p-4 items-center ${isLoading ? 'opacity-70' : ''}`}
onPress={handleContinue}
disabled={isLoading}
>
<ThemedText className="text-textTertiary text-lg font-semibold">
Next
</ThemedText>
</TouchableOpacity>
</View>
</View>
</View>
</View>
</View>
);
}