/* eslint-disable react-hooks/exhaustive-deps */ import { ButtonCenteredOnly, ButtonCustom, InformationBox, LandscapeFrameUploaded, SelectCustom, Spacing, StackCustom, TextInputCustom, ViewWrapper, } from "@/components"; import API_STRORAGE from "@/constants/base-url-api-strorage"; import DIRECTORY_ID from "@/constants/directory-id"; import dummyPembagianDeviden from "@/lib/dummy-data/investment/pembagian-deviden"; import dummyListPencarianInvestor from "@/lib/dummy-data/investment/pencarian-investor"; import dummyPeriodeDeviden from "@/lib/dummy-data/investment/periode-deviden"; import { apiInvestmentGetById, apiInvestmentUpdateData, } from "@/service/api-client/api-investment"; import { deleteImageService, uploadImageService, } from "@/service/upload-service"; import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay"; import pickFile from "@/utils/pickFile"; import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; import { useCallback, useState } from "react"; import Toast from "react-native-toast-message"; interface IInvestment { title?: string; targetDana?: string; hargaLembar?: string; totalLembar?: string; roi?: string; masterPencarianInvestorId?: string; masterPeriodeDevidenId?: string; masterPembagianDevidenId?: string; authorId?: string; imageId?: string; prospektusFileId?: string; } export default function InvestmentEdit() { const { id } = useLocalSearchParams(); const [data, setData] = useState({ title: "", targetDana: "", hargaLembar: "", totalLembar: "", roi: "", masterPencarianInvestorId: "", masterPeriodeDevidenId: "", masterPembagianDevidenId: "", authorId: "", imageId: "", prospektusFileId: "", }); const [image, setImage] = useState(null); const [isLoading, setIsLoading] = useState(false); const displayTargetDana = formatCurrencyDisplay(data?.targetDana); const displayHargaPerLembar = formatCurrencyDisplay(data?.hargaLembar); const displayTotalLembar = formatCurrencyDisplay( Number(data?.targetDana) / Number(data?.hargaLembar) ); const handleChangeCurrency = (field: keyof typeof data) => (text: string) => { const numeric = text.replace(/\D/g, ""); setData((prev) => ({ ...prev, [field]: numeric })); }; useFocusEffect( useCallback(() => { onLoadData(); }, [id]) ); const onLoadData = async () => { try { const response = await apiInvestmentGetById({ id: id as string, }); // console.log("[DATA]", JSON.stringify(response.data, null, 2)); setData(response.data); } catch (error) { console.log("[ERROR]", error); } }; const handleSubmitUpdate = async () => { let newData = { ...data, }; if ( newData?.title === "" || newData?.targetDana === "" || newData?.hargaLembar === "" || newData?.totalLembar === "" || newData?.roi === "" || newData?.masterPencarianInvestorId === "" || newData?.masterPeriodeDevidenId === "" || newData?.masterPembagianDevidenId === "" ) { Toast.show({ type: "info", text1: "Harap isi semua data", }); return; } try { setIsLoading(true); if (image) { const responseUploadImage = await uploadImageService({ imageUri: image, dirId: DIRECTORY_ID.investasi_image, }); if (!responseUploadImage.success) { Toast.show({ type: "error", text1: "Gagal mengunggah gambar", }); return; } const deletePrevImage = await deleteImageService({ id: data?.imageId as any, }); if (!deletePrevImage.success) { Toast.show({ type: "error", text1: "Gagal menghapus gambar", }); return; } newData = { ...newData, imageId: responseUploadImage.data.id, }; } const responseUpdate = await apiInvestmentUpdateData({ id: id as string, data: newData, }); console.log("[RESPONSE UPDATE]", JSON.parse(JSON.stringify(responseUpdate))); if (responseUpdate.success) { Toast.show({ type: "success", text1: "Data berhasil diupdate", }); router.back(); } else { Toast.show({ type: "error", text1: responseUpdate.message, }); } } catch (error) { console.log("[ERROR]", error); } finally { setIsLoading(false); } }; return ( { pickFile({ setImageUri: ({ uri }) => { console.log("URI IMAGE", uri); setImage(uri); }, allowedType: "image", }); }} > Upload setData({ ...data, title: value })} /> setData({ ...data, totalLembar: value })} value={displayTotalLembar} /> setData({ ...data, roi: value })} value={data?.roi === "" ? "" : data?.roi} /> ({ label: item.name + `${" "}hari`, value: item.id, }))} onChange={(value) => setData({ ...data, masterPencarianInvestorId: value as any }) } value={data.masterPencarianInvestorId} /> ({ label: item.name, value: item.id, }))} onChange={(value) => setData({ ...data, masterPeriodeDevidenId: value as any }) } value={data.masterPeriodeDevidenId} /> ({ label: item.name + `${" "}bulan`, value: item.id, }))} onChange={(value) => setData({ ...data, masterPembagianDevidenId: value as any }) } value={data.masterPembagianDevidenId} /> Simpan ); }