"use client"; import { MainColor } from "@/app_modules/_global/color/color_pallet"; import { ComponentGlobal_BoxInformation, ComponentGlobal_BoxUploadImage, ComponentGlobal_ButtonUploadFileImage, ComponentGlobal_CardStyles, } from "@/app_modules/_global/component"; import { AspectRatio, Box, Center, Grid, Image, Loader, Select, Stack, Text, TextInput, } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { IconCircleCheck, IconFileTypePdf, IconPhoto, } from "@tabler/icons-react"; import _ from "lodash"; import { useState } from "react"; import { Investasi_ComponentButtonCreateNewInvestasi } from "../_component"; import { Investasi_ComponentButtonUploadFile } from "../_component/button/comp_button_upload_file_prospektus"; import { apiGetMasterInvestasi } from "../_lib/api_interface"; export default function InvestasiCreateNew() { const [loadingMasterInvestor, setLoadingMasterInvestor] = useState(true); const [loadingMasterPeriodeDeviden, setLoadingMasterPeriodeDeviden] = useState(true); const [loadingMasterPembagianDeviden, setLoadingMasterPembagianDeviden] = useState(true); const [periodeDeviden, setPeriodeDeviden] = useState([]); const [pembagianDeviden, setPembagianDeviden] = useState([]); const [pencarianInvestor, setPencarianInvestor] = useState([]); const [fileImage, setFileImage] = useState(null); const [img, setImg] = useState(); const [filePdf, setFilePdf] = useState(null); const [fPdf, setFPdf] = useState(null); const [totalLembar, setTotalLembar] = useState(0); const [value, setValue] = useState({ title: "", targetDana: 0, hargaLembar: 0, roi: 0, pencarianInvestorId: "", periodeDevidenId: "", pembagianDevidenId: "", }); const [target, setTarget] = useState(""); const [harga, setHarga] = useState(""); const [isLoadingImg, setIsLoadingImg] = useState(false); const [isLoadingPdf, setIsLoadingPdf] = useState(false); const [isMinimalTarget, setMinimalTarget] = useState(false); async function onTotalLembar({ target, harga, }: { target?: number | any; harga?: number | any; }) { if (target !== 0 && harga !== 0) { const hasil: any = target / harga; setTotalLembar(_.floor(hasil === Infinity ? 0 : hasil)); } } async function onGetMasterInvestor() { try { setLoadingMasterInvestor(true); const response = await apiGetMasterInvestasi("?cat=pencarian-investor"); if (response.success) { setPencarianInvestor(response.data); } } catch (error) { console.log(error); } finally { setLoadingMasterInvestor(false); } } async function onGetMasterPeriodeDeviden() { try { setLoadingMasterPeriodeDeviden(true); const response = await apiGetMasterInvestasi("?cat=periode-deviden"); if (response.success) { setPeriodeDeviden(response.data); } } catch (error) { console.log(error); } finally { setLoadingMasterPeriodeDeviden(false); } } async function onGetMasterPembagianDeviden() { try { setLoadingMasterPembagianDeviden(true); const response = await apiGetMasterInvestasi("?cat=pembagian-deviden"); if (response.success) { setPembagianDeviden(response.data); } } catch (error) { console.log(error); } finally { setLoadingMasterPembagianDeviden(false); } } useShallowEffect(() => { onGetMasterInvestor(); onGetMasterPeriodeDeviden(); onGetMasterPembagianDeviden(); }, []); return ( <> {/* Upload Image */} {isLoadingImg ? ( ) : img ? ( Foto ) : ( )} {/* Upload Foto */}
{/* Upload File */} {isLoadingPdf ? ( ) : !filePdf ? ( ) : (
{filePdf.name}
)}
} />
{ setValue({ ...value, title: val.target.value, }); }} /> Rp.} min={0} withAsterisk label="Dana Dibutuhkan" placeholder="0" value={target} error={isMinimalTarget ? "Minimal target 10.000.000" : ""} onChange={(val) => { // console.log(typeof val) const match = val.currentTarget.value .replace(/\./g, "") .match(/^[0-9]+$/); if (val.currentTarget.value === "") return setTarget(0 + ""); if (!match?.[0]) return null; const nilai = val.currentTarget.value.replace(/\./g, ""); const targetNilai = Intl.NumberFormat("id-ID").format(+nilai); // console.log("type nilai", typeof nilai); // console.log("nilai", nilai); // console.log("targetNilai", targetNilai); // console.log("type targetNilai", typeof targetNilai); if (+nilai < 10000000) { setMinimalTarget(true); } else { setMinimalTarget(false); } onTotalLembar({ target: +nilai, harga: +value.hargaLembar, }); setTarget(targetNilai); setValue({ ...value, targetDana: +nilai, }); }} /> Rp.} min={0} withAsterisk label="Harga Per Lembar" placeholder="0" value={harga} onChange={(val) => { try { // console.log(typeof +val.currentTarget.value); const match = val.currentTarget.value .replace(/\./g, "") .match(/^[0-9]+$/); if (val.currentTarget.value === "") return setHarga(0 + ""); if (!match?.[0]) return null; const nilai = val.currentTarget.value.replace(/\./g, ""); const targetNilai = Intl.NumberFormat("id-ID").format(+nilai); onTotalLembar({ harga: +nilai, target: +value.targetDana, }); setHarga(targetNilai); setValue({ ...value, hargaLembar: +nilai, }); } catch (error) { console.log(error); } }} /> % } withAsterisk type="number" label={"Rasio Keuntungan / ROI %"} placeholder="Masukan rasio keuntungan" onChange={(val) => { setValue({ ...value, roi: _.toNumber(val.target.value), }); }} /> ({ value: e.id, label: e.name }))} onChange={(val) => { setValue({ ...(value as any), periodeDevidenId: val, }); }} />