import React, { createContext, useCallback, useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useLanguage } from '@/i18n'; import { DefaultTooltip, KeenIcon } from '@/components'; import { Button } from '@/components/ui/button'; import { apiConfig } from '@/config/api.config'; import { Stepper, Step, StepLabel } from '@mui/material'; import { StepOne, StepTwo, StepThree, StepFour } from '../steps'; import { useCallApi } from '@/hooks'; import { toast } from 'sonner'; import { doSaveLogActivity } from '@/actions/GlobalActions'; const API_URL = apiConfig.service_credit; const CreditAddContext = createContext(null); const steps = ['Step 1', 'Step 2', 'Step 3', 'Step 4']; const initialState = { name: '', employee_id: '', phone: '', application_date: '', identity_type: '', identity_file: '', companyId: '', // => wajib type: '', marriage_type: '', marriage_file: '', //Surat Keterangan Menikah family_file: '', // Kartu keluarga form: [], spouse_type: '', spouse_file_type: '', spouse_file: '', photo: '', spouse_photo: '', account_number: '', amount: '', period_amount: '', period_type: '', status: '', description: '' }; // console.log('initialState:', initialState); const CreditAddContextProvider = ({ children }: { children: React.ReactNode }) => { const navigate = useNavigate(); const [activeStep, setActiveStep] = useState(0); const [formData, setFormData] = useState(initialState); const { PostData } = useCallApi(); const [alert, setAlert] = useState({ show: false, message: '' }); type State = typeof initialState; // Gunakan tipe otomatis dari initialState const validateState = (state: State): Record => { const errors: Record = {}; if (!state.companyId || state.companyId.trim() === '') { errors.companyId = 'Instansi pengaju harus diisi.'; } return errors; }; const handleBackClick = () => navigate('/pengajuan_kredit/list'); const handleNext = () => { if (activeStep < steps.length - 1) { if (activeStep === 0) { const errors = validateState(formData); if (Object.keys(errors).length > 0) { toast.error(errors.companyId); return; } } setActiveStep((prevStep) => prevStep + 1); } else { handleSubmit(); } }; const handleBack = () => setActiveStep((prev) => prev - 1); const handleSaveToDraft = () => { setFormData((prev: any) => ({ ...prev, status: 'draft' })); }; const handleSubmit = () => { setFormData((prev: any) => ({ ...prev, status: 'open' })); }; useEffect(() => { if (formData.status !== '') { doCreateCredit(formData); } }, [formData]); const renderStepContent = (step: number) => { switch (step) { case 0: return ; case 1: return ; case 2: return ; case 3: return ; default: return
Langkah tidak dikenal
; } }; const resetForm = () => { setFormData(initialState); }; const doCreateCredit = useCallback(async (updatedFormData: typeof formData) => { console.log('formData: ', updatedFormData); const response = await PostData(`${API_URL}/application/create`, updatedFormData); if (response?.status) { setAlert((prev) => ({ ...prev, show: false, message: '' })); toast.success('Success Create New Credit'); resetForm(); const createActivity = { module: 'Create Pengajuan Credit', description: `Add new data Credit for => ${updatedFormData?.name}`, action: 'C' }; doSaveLogActivity(createActivity); handleBackClick(); } else { setAlert((prev) => ({ ...prev, show: true, message: response?.message })); } }, []); return (
{/* Header */}

Pengajuan Kredit

{/* Stepper */} {steps.map((label, index) => ( ))} {/* Step Content */} {activeStep === steps.length ? (

Semua langkah selesai - Anda telah menyelesaikan proses

) : (

Langkah {activeStep + 1}/4

{renderStepContent(activeStep)}
{activeStep !== 0 && ( )} {activeStep === steps.length - 1 && ( )}
)}
); }; export { CreditAddContext, CreditAddContextProvider };