import { ButtonCenteredOnly, ButtonCustom, InformationBox, LandscapeFrameUploaded, LoaderCustom, SelectCustom, Spacing, StackCustom, TextInputCustom, ViewWrapper, } from "@/components"; import DIRECTORY_ID from "@/constants/directory-id"; import { apiDonationCreate } from "@/service/api-client/api-donation"; import { apiMasterDonation } from "@/service/api-client/api-master"; import { uploadFileService } from "@/service/upload-service"; import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay"; import pickFile from "@/utils/pickFile"; import { router, useFocusEffect } from "expo-router"; import _ from "lodash"; import { useCallback, useState } from "react"; import Toast from "react-native-toast-message"; export default function DonationCreate() { const [listCategory, setListCategory] = useState([]); const [listDuration, setListDuration] = useState([]); const [loadList, setLoadList] = useState(false); const [isLoading, setIsLoading] = useState(false); const [image, setImage] = useState(null); const [data, setData] = useState({ kategoriId: "", title: "", target: "", durasiId: "", }); const displayTarget = formatCurrencyDisplay(data.target); const handleChangeCurrency = (field: keyof typeof data) => (text: string) => { const numeric = text.replace(/\D/g, ""); setData((prev) => ({ ...prev, [field]: numeric })); }; useFocusEffect( useCallback(() => { onLoadList(); }, []) ); const onLoadList = async () => { try { setLoadList(true); const response = await apiMasterDonation({ category: "" }); setListCategory(response.data.category); setListDuration(response.data.duration); } catch (error) { console.log(["ERROR"], error); setListCategory([]); setListDuration([]); } finally { setLoadList(false); } }; const validateData = () => { if (!data.title || !data.target || !data.durasiId || !data.kategoriId) { Toast.show({ type: "error", text1: "Harap isi semua data", }); return false; } return true; }; const handlerSubmit = async () => { if (!validateData()) { return; } try { setIsLoading(true); const responseUploadImage = await uploadFileService({ imageUri: image, dirId: DIRECTORY_ID.donasi_image, }); if (!responseUploadImage.success) { Toast.show({ type: "error", text1: "Gagal mengunggah gambar", }); return; } const imageId = responseUploadImage.data.id; const newData = { title: data.title, target: data.target, durasiId: data.durasiId, kategoriId: data.kategoriId, imageId: imageId, }; const response = await apiDonationCreate({ data: newData, category: "temporary", }); if (!response.success) { Toast.show({ type: "error", text1: "Gagal membuat donasi", }); return; } router.push(`/donation/create-story?id=${response.data.id}`); } catch (error) { console.log("[ERROR]", error); } finally { setIsLoading(false); } }; return ( setData({ ...data, title: value })} /> { pickFile({ allowedType: "image", setImageUri: ({ uri }) => { setImage(uri); }, }); }} icon="upload" > Upload {loadList ? ( ) : ( ({ label: item.name, value: item.id, })) } label="Pilih Kategori Donasi" placeholder="Pilih Kategori Donasi" required value={data.kategoriId} onChange={(value: any) => setData({ ...data, kategoriId: value })} /> )} {loadList ? ( ) : ( ({ label: item.name + `${" hari"}`, value: item.id, })) } label="Pilih Durasi Donasi" placeholder="Pilih Durasi Donasi" required value={data.durasiId} onChange={(value: any) => setData({ ...data, durasiId: value })} /> )} { handlerSubmit(); // router.push(`/donation/create-story?id=${"dasdsadsa"}`); }} > Selanjutnya ); }