"use client"; import { MainColor } from "@/app_modules/_global/color/color_pallet"; import { ComponentGlobal_BoxInformation, ComponentGlobal_BoxUploadImage, ComponentGlobal_CardStyles, } from "@/app_modules/_global/component"; import { MAX_SIZE } from "@/app_modules/_global/lib"; import { PemberitahuanMaksimalFile } from "@/app_modules/_global/lib/max_size"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global"; import { AspectRatio, Box, Button, Center, FileButton, Grid, Group, Image, Loader, Select, Stack, Text, TextInput, } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { IconCamera, IconCircleCheck, IconFileTypePdf, IconPhoto, } from "@tabler/icons-react"; import _ from "lodash"; import { useState } from "react"; import { Investasi_ComponentButtonCreateNewInvestasi } from "../_component"; 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); 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 */} { try { setIsLoadingImg(true); const buffer = URL.createObjectURL( new Blob([new Uint8Array(await files.arrayBuffer())]) ); if (files.size > MAX_SIZE) { ComponentGlobal_NotifikasiPeringatan( PemberitahuanMaksimalFile ); setImg(null); return; } setImg(buffer); setFileImage(files); } catch (error) { console.log(error); } finally { setIsLoadingImg(false); } }} accept="image/png,image/jpeg" > {(props) => ( )} {/* Upload File */} {isLoadingPdf ? ( ) : !filePdf ? ( ) : ( {filePdf.name}
)}
{ try { setIsLoadingPdf(true); const buffer = URL.createObjectURL( new Blob([new Uint8Array(await files.arrayBuffer())]) ); if (files.size > MAX_SIZE) { ComponentGlobal_NotifikasiPeringatan( PemberitahuanMaksimalFile ); setFilePdf(null); return; } setFPdf(buffer); setFilePdf(files); } catch (error) { console.log(error); } finally { setIsLoadingPdf(false); } }} > {(props) => ( )}
{ setValue({ ...value, title: val.target.value, }); }} /> Rp.} min={0} withAsterisk label="Dana Dibutuhkan" placeholder="0" value={target} 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); 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, }); }} />