/* eslint-disable react-hooks/exhaustive-deps */ import { ButtonCenteredOnly, ButtonCustom, InformationBox, LandscapeFrameUploaded, LoaderCustom, SelectCustom, Spacing, StackCustom, TextInputCustom, ViewWrapper, } from "@/components"; import API_STRORAGE from "@/constants/base-url-api-strorage"; import DIRECTORY_ID from "@/constants/directory-id"; import { apiInvestmentGetOne, apiInvestmentUpdateData, } from "@/service/api-client/api-investment"; import { apiMasterInvestment } from "@/service/api-client/api-master"; import { deleteFileService, uploadFileService, } from "@/service/upload-service"; import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay"; import pickFile from "@/utils/pickFile"; import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; import _ from "lodash"; 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 [loadingMaster, setLoadingMaster] = useState(false); const [listPencarianInvestor, setListPencarianInvestor] = useState([]); const [listPeriodeDeviden, setListPeriodeDeviden] = useState([]); const [listPembagianDeviden, setListPembagianDeviden] = useState([]); useFocusEffect( useCallback(() => { onLoadMaster(); onLoadData(); }, [id]) ); const onLoadMaster = async () => { try { setLoadingMaster(true); const response = await apiMasterInvestment({ category: "" }); setListPencarianInvestor(response.data.pencarianInvestor); setListPeriodeDeviden(response.data.periodeDeviden); setListPembagianDeviden(response.data.pembagianDeviden); } catch (error) { console.log("[ERROR]", error); } finally { setLoadingMaster(false); } }; const onLoadData = async () => { try { const response = await apiInvestmentGetOne({ id: id as string, }); setData(response.data); } catch (error) { console.log("[ERROR]", error); } }; const displayTargetDana = formatCurrencyDisplay(data?.targetDana); const displayHargaPerLembar = formatCurrencyDisplay(data?.hargaLembar); const realTotalLembar = Number(data?.targetDana) / Number(data?.hargaLembar); const displayTotalLembar = formatCurrencyDisplay(realTotalLembar); const handleChangeCurrency = (field: keyof typeof data) => (text: string) => { const numeric = text.replace(/\D/g, ""); setData((prev) => ({ ...prev, [field]: numeric })); }; const validateData = () => { if ( !data.title || !data.targetDana || !data.hargaLembar || !data.totalLembar || !data.roi || !data.masterPencarianInvestorId || !data.masterPeriodeDevidenId || !data.masterPembagianDevidenId ) { Toast.show({ type: "info", text1: "Harap isi semua data", }); return false; } return true; }; const handleSubmitUpdate = async () => { let newData = { ...data, totalLembar: realTotalLembar.toString(), }; if (!validateData()) { return; } try { setIsLoading(true); if (image) { const responseUploadImage = await uploadFileService({ imageUri: image, dirId: DIRECTORY_ID.investasi_image, }); if (!responseUploadImage.success) { Toast.show({ type: "error", text1: "Gagal mengunggah gambar", }); return; } const deletePrevImage = await deleteFileService({ 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, category: "data" }); 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 }) => { setImage(uri); }, allowedType: "image", }); }} > Upload setData({ ...data, title: value })} /> setData({ ...data, totalLembar: value })} value={displayTotalLembar} /> setData({ ...data, roi: value })} value={data?.roi === "" ? "" : data?.roi} /> {loadingMaster ? ( ) : ( ({ label: item.name + `${" "}hari`, value: item.id, })) } onChange={(value) => setData({ ...data, masterPencarianInvestorId: value as any }) } value={data.masterPencarianInvestorId} /> )} {loadingMaster ? ( ) : ( ({ label: item.name, value: item.id, })) } onChange={(value) => setData({ ...data, masterPeriodeDevidenId: value as any }) } value={data.masterPeriodeDevidenId} /> )} {loadingMaster ? ( ) : ( ({ label: item.name + `${" "}bulan`, value: item.id, })) } onChange={(value) => setData({ ...data, masterPembagianDevidenId: value as any }) } value={data.masterPembagianDevidenId} /> )} Simpan ); }