import React, { FC, useState, useCallback, useEffect } from 'react'; import { ScrollView } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { WizardContainer, Loader, Toast } from 'components/core'; import CACHE_KEYS from 'constants/cacheKeys'; import * as ROUTES from 'constants/routes'; import { useApi } from 'hooks'; import { dietPrograms, defaultProgramRecommendations, } from 'constants/dietelaProgram'; import { retrieveNutritionistsApi } from 'services/nutritionists'; import { Nutritionist } from 'services/nutritionists/models'; import { createCartApi } from 'services/payment'; import { layoutStyles } from 'styles'; import { setCache, getCache } from 'utils/cache'; import { PricingList } from './components'; import { initialValues, getRecommendedPrograms } from './schema'; const ChoosePlan: FC = () => { const navigation = useNavigation(); const [currentPage, setCurrentPage] = useState(1); const [isSubmitting, setIsSubmitting] = useState(false); const [values, setValues] = useState(initialValues); const [programs, setPrograms] = useState(undefined); const handleSubmit = async () => { setIsSubmitting(true); const response = await createCartApi(values); setIsSubmitting(false); if (response.success) { await setCache(CACHE_KEYS.cartId, response.data?.id); navigation.navigate(ROUTES.checkout, response.data); } else { Toast.show({ type: 'error', text1: 'Gagal menyimpan data', text2: 'Terjadi kesalahan pada sisi kami. Silakan coba lagi', }); } }; const handleChange = (name: string, value: string) => { setValues({ ...values, [name]: value, }); }; const isCurrentPageError = (): boolean => { const fieldName = currentPage === 1 ? 'program' : 'nutritionist'; return values[fieldName] === null; }; const getPrograms = useCallback(async () => { const cachedPrograms = await getCache(CACHE_KEYS.programRecommendations); setPrograms( cachedPrograms ? JSON.parse(cachedPrograms) : defaultProgramRecommendations, ); }, []); useEffect(() => { getPrograms(); }, [getPrograms]); const { isLoading, data: nutritionists = [] } = useApi( retrieveNutritionistsApi, ); if (isLoading || programs === undefined) { return ; } return ( ({ ...dietPrograms[code], value: code, onReadMore: () => navigation.navigate(ROUTES.programDetail, { id: code }), }))} value={values.program} onChange={(v) => handleChange('program', v)} /> , ({ title: nutritionist.full_name_and_degree, value: nutritionist.id, info: nutritionist.mastered_nutritional_problems .split(';') .slice(0, 3), onReadMore: () => navigation.navigate(ROUTES.nutritionistDetail, { id: nutritionist.id, }), }))} value={values.nutritionist} onChange={(v) => handleChange('nutritionist', v)} /> , ]} /> ); }; export default ChoosePlan;