From 360ba267ec69404dd45bb7d6510fe6113d9087ab Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Mon, 21 Oct 2024 09:30:44 +0800 Subject: [PATCH] Fix: Upload image - Upload image berita ke server wibu - Tampilan detail image di ambil dari server wibu ## No issue --- package.json | 2 +- prisma/schema.prisma | 12 + src/app/dev/donasi/main/galang_dana/page.tsx | 5 + src/app/dev/investasi/berita/[id]/layout.tsx | 14 -- src/app/dev/investasi/berita/[id]/page.tsx | 13 +- .../dev/investasi/berita/daftar/[id]/page.tsx | 14 ++ .../dev/investasi/berita/rekap/[id]/page.tsx | 17 ++ .../dev/investasi/create/berita/[id]/page.tsx | 10 + src/app/dev/investasi/detail/[id]/layout.tsx | 14 -- src/app/dev/investasi/detail/[id]/page.tsx | 13 +- .../investasi/detail/portofolio/[id]/page.tsx | 10 +- .../daftar}/[id]/page.tsx | 8 +- .../rekap}/[id]/page.tsx | 8 +- src/app/lib/id-derectory.ts | 9 + src/app/lib/router_hipmi/router_investasi.ts | 47 +++- .../component/card_view/card_publish.tsx | 31 +-- .../component/card_view/card_status.tsx | 61 ++--- .../detail_galang_dana/detail_data_donasi.tsx | 62 ++--- .../detail_main/detail_data_donasi.tsx | 24 +- .../create/create_cerita_penggalang.tsx | 213 ++++++++-------- .../donasi/create/create_donasi.tsx | 148 +++++------ src/app_modules/donasi/create/layout.tsx | 4 +- .../detail_main/cerita_penggalang/index.tsx | 12 +- .../detail_main/penggalang_dana/index.tsx | 19 +- .../donasi/fun/create/fun_create_donasi.ts | 65 ++--- .../fun/create/fun_create_donasi_temporary.ts | 42 +--- .../donasi/fun/get/get_author_by_id.ts | 4 + .../donasi/fun/get/get_cerita_penggalang.ts | 1 + .../donasi/fun/get/get_list_beranda.tsx | 21 +- .../donasi/fun/get/get_one_donasi_by_id.ts | 22 +- .../donasi/fun/get/get_temporary_create.ts | 1 + .../fun/get/status/get_all_status_publish.ts | 1 + src/app_modules/donasi/model/interface.ts | 5 + .../detail/comp_box_daftar_berita.tsx | 14 +- .../detail/saham_saya/comp_detail_data.tsx | 6 +- .../_component/main/comp_card_beranda.tsx | 13 +- .../main/comp_card_portofolio_publish.tsx | 21 +- .../_component/main/comp_card_saham_saya.tsx | 12 - .../_fun/create/fun_create_berita.tsx | 45 ++++ .../_fun/delete/fun_delete_berita.tsx | 23 ++ .../_fun/get/fun_get_berita_by_id.tsx | 24 ++ .../_fun/get/fun_get_one_berita_by_id.tsx | 18 ++ .../_fun/get/fun_get_one_investasi_by_id.ts | 2 +- src/app_modules/investasi/_fun/index.ts | 8 + .../investasi/_ui/create/ui_create_berita.tsx | 23 ++ .../investasi/_ui/detail/ui_berita.tsx | 115 +++++++++ .../investasi/_ui/detail/ui_daftar_berita.tsx | 21 ++ .../investasi/_ui/detail/ui_detail_main.tsx | 79 ++++++ .../_ui/detail/ui_detail_portofolio.tsx | 14 +- .../investasi/_ui/detail/ui_rekap_berita.tsx | 63 +++++ src/app_modules/investasi/_ui/index.ts | 10 + .../_view/create/view_create_berita.tsx | 206 ++++++++++++++++ .../detail/portofolio/view_detai_publish.tsx | 232 ------------------ .../detail/portofolio/view_detail_draft.tsx | 10 +- .../detail/portofolio/view_detail_publish.tsx | 221 +++++++++++++++++ .../detail/portofolio/view_detail_reject.tsx | 3 +- .../detail/portofolio/view_detail_review.tsx | 11 +- .../investasi/_view/detail/view_berita.tsx | 37 +++ .../_view/detail/view_daftar_berita.tsx | 45 ++++ .../_view/detail/view_daftar_dokemen.tsx | 6 +- .../_view/detail/view_detail_main.tsx | 11 + .../_view/detail/view_rekap_berita.tsx | 45 ++++ src/app_modules/investasi/_view/index.ts | 12 +- src/app_modules/investasi/create/view.tsx | 44 +--- .../investasi/create_berita/view.tsx | 10 +- .../investasi/fun/fun_create_berita.ts | 13 +- 66 files changed, 1528 insertions(+), 821 deletions(-) delete mode 100644 src/app/dev/investasi/berita/[id]/layout.tsx create mode 100644 src/app/dev/investasi/berita/daftar/[id]/page.tsx create mode 100644 src/app/dev/investasi/berita/rekap/[id]/page.tsx create mode 100644 src/app/dev/investasi/create/berita/[id]/page.tsx delete mode 100644 src/app/dev/investasi/detail/[id]/layout.tsx rename src/app/dev/investasi/{detail/daftar-dokumen => dokumen/daftar}/[id]/page.tsx (70%) rename src/app/dev/investasi/{detail/rekap-dokumen => dokumen/rekap}/[id]/page.tsx (66%) create mode 100644 src/app_modules/investasi/_fun/create/fun_create_berita.tsx create mode 100644 src/app_modules/investasi/_fun/delete/fun_delete_berita.tsx create mode 100644 src/app_modules/investasi/_fun/get/fun_get_berita_by_id.tsx create mode 100644 src/app_modules/investasi/_fun/get/fun_get_one_berita_by_id.tsx create mode 100644 src/app_modules/investasi/_ui/create/ui_create_berita.tsx create mode 100644 src/app_modules/investasi/_ui/detail/ui_berita.tsx create mode 100644 src/app_modules/investasi/_ui/detail/ui_daftar_berita.tsx create mode 100644 src/app_modules/investasi/_ui/detail/ui_detail_main.tsx create mode 100644 src/app_modules/investasi/_ui/detail/ui_rekap_berita.tsx create mode 100644 src/app_modules/investasi/_view/create/view_create_berita.tsx delete mode 100644 src/app_modules/investasi/_view/detail/portofolio/view_detai_publish.tsx create mode 100644 src/app_modules/investasi/_view/detail/portofolio/view_detail_publish.tsx create mode 100644 src/app_modules/investasi/_view/detail/view_berita.tsx create mode 100644 src/app_modules/investasi/_view/detail/view_daftar_berita.tsx create mode 100644 src/app_modules/investasi/_view/detail/view_detail_main.tsx create mode 100644 src/app_modules/investasi/_view/detail/view_rekap_berita.tsx diff --git a/package.json b/package.json index 9b56140c..631f9762 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hipmi", - "version": "1.0.4", + "version": "1.0.5", "private": true, "prisma": { "seed": "npx tsx prisma/seed.ts" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 1d534fd1..c946ba04 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -418,6 +418,8 @@ model Donasi { Donasi_Invoice Donasi_Invoice[] Donasi_Kabar Donasi_Kabar[] Donasi_PencairanDana Donasi_PencairanDana[] + + imageId String? } model Donasi_TemporaryCreate { @@ -433,6 +435,8 @@ model Donasi_TemporaryCreate { donasiMaster_KategoriId String? durasi DonasiMaster_Durasi? @relation(fields: [donasiMaster_DurasiId], references: [id]) donasiMaster_DurasiId String? + + imageId String? } model DonasiMaster_Kategori { @@ -467,6 +471,8 @@ model Donasi_Cerita { imagesId String? @unique Donasi Donasi? @relation(fields: [donasiId], references: [id]) donasiId String? @unique + + imageId String? } model DonasiMaster_StatusDonasi { @@ -514,6 +520,8 @@ model Donasi_Invoice { authorId String? Images Images? @relation(fields: [imagesId], references: [id]) imagesId String? + + imageId String? } model Donasi_Kabar { @@ -529,6 +537,8 @@ model Donasi_Kabar { ImagesKabar Images? @relation(fields: [imagesId], references: [id]) imagesId String? Donasi_Notif Donasi_Notif[] + + imageId String? } model Donasi_Notif { @@ -556,6 +566,8 @@ model Donasi_PencairanDana { donasiId String? Images Images? @relation(fields: [imagesId], references: [id]) imagesId String? + + imageId String? } // ========================================= EVENT ========================================= // diff --git a/src/app/dev/donasi/main/galang_dana/page.tsx b/src/app/dev/donasi/main/galang_dana/page.tsx index fca4f380..26f936c1 100644 --- a/src/app/dev/donasi/main/galang_dana/page.tsx +++ b/src/app/dev/donasi/main/galang_dana/page.tsx @@ -10,6 +10,11 @@ export default async function Page() { const listDraft = await donasi_funGetAllStatusDraft({ page: 1 }); const listReject = await donasi_funGetAllStatusReject({ page: 1 }); + // console.log(listPublish, "ini publish") + // console.log(listReview, "ini review") + // console.log(listDraft, "ini draft") + // console.log(listReject, "ini reject") + return ( <> - {children} - - ); -} diff --git a/src/app/dev/investasi/berita/[id]/page.tsx b/src/app/dev/investasi/berita/[id]/page.tsx index b37fb6b6..6e6e573d 100644 --- a/src/app/dev/investasi/berita/[id]/page.tsx +++ b/src/app/dev/investasi/berita/[id]/page.tsx @@ -1,13 +1,12 @@ -import { BeritaInvestasi } from "@/app_modules/investasi"; -import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id"; - -export default async function Page({params}: {params: {id: string}}) { - - const dataInvestasi = await getOneInvestasiById(params.id) +import { investasi_funGetOneBeritaById } from "@/app_modules/investasi/_fun"; +import { Investasi_UiDetailBerita } from "@/app_modules/investasi/_ui"; +export default async function Page({ params }: { params: { id: string } }) { + const beritaId = params.id; + const dataBerita = await investasi_funGetOneBeritaById({ beritaId }); return ( <> - + ); } diff --git a/src/app/dev/investasi/berita/daftar/[id]/page.tsx b/src/app/dev/investasi/berita/daftar/[id]/page.tsx new file mode 100644 index 00000000..62d40827 --- /dev/null +++ b/src/app/dev/investasi/berita/daftar/[id]/page.tsx @@ -0,0 +1,14 @@ +import { investasi_funGetBeritaById } from "@/app_modules/investasi/_fun"; +import { Investasi_UiDaftarBerita } from "@/app_modules/investasi/_ui"; + +export default async function Page({ params }: { params: { id: string } }) { + const investasiId = params.id; + const dataBerita = await investasi_funGetBeritaById({ investasiId }); + + + return ( + <> + + + ); +} diff --git a/src/app/dev/investasi/berita/rekap/[id]/page.tsx b/src/app/dev/investasi/berita/rekap/[id]/page.tsx new file mode 100644 index 00000000..7075e1b7 --- /dev/null +++ b/src/app/dev/investasi/berita/rekap/[id]/page.tsx @@ -0,0 +1,17 @@ +import { investasi_funGetBeritaById } from "@/app_modules/investasi/_fun"; +import { Investasi_UiRekapBerita } from "@/app_modules/investasi/_ui"; + +export default async function Page({ params }: { params: { id: string } }) { + const investasiId = params.id; + const dataBerita = await investasi_funGetBeritaById({ investasiId }); + + + return ( + <> + + + ); +} diff --git a/src/app/dev/investasi/create/berita/[id]/page.tsx b/src/app/dev/investasi/create/berita/[id]/page.tsx new file mode 100644 index 00000000..b4d9a4f6 --- /dev/null +++ b/src/app/dev/investasi/create/berita/[id]/page.tsx @@ -0,0 +1,10 @@ +import { Investasi_UiCreateBerita } from "@/app_modules/investasi/_ui"; + +export default async function Page({ params }: { params: { id: string } }) { + const investasiId = params.id; + return ( + <> + + + ); +} diff --git a/src/app/dev/investasi/detail/[id]/layout.tsx b/src/app/dev/investasi/detail/[id]/layout.tsx deleted file mode 100644 index bd4ccaa3..00000000 --- a/src/app/dev/investasi/detail/[id]/layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { LayoutDetailInvestasi } from "@/app_modules/investasi"; -import React from "react"; - -export default async function Layout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - <> - {children} - - ); -} diff --git a/src/app/dev/investasi/detail/[id]/page.tsx b/src/app/dev/investasi/detail/[id]/page.tsx index e1a4fef2..3fd6f965 100644 --- a/src/app/dev/investasi/detail/[id]/page.tsx +++ b/src/app/dev/investasi/detail/[id]/page.tsx @@ -1,18 +1,19 @@ import { funGetUserIdByToken } from "@/app_modules/_global/fun/get"; -import { DetailInvestasi } from "@/app_modules/investasi"; -import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id"; +import { investasi_funGetOneInvestasiById } from "@/app_modules/investasi/_fun"; +import { Investasi_UiDetailMain } from "@/app_modules/investasi/_ui"; + export default async function Page({ params }: { params: { id: string } }) { const investasiId = params.id; const userLoginId = await funGetUserIdByToken(); - - const dataInvestasi = await getOneInvestasiById(investasiId); + + const dataInvestasi = await investasi_funGetOneInvestasiById({ investasiId }); return ( <> - ); diff --git a/src/app/dev/investasi/detail/portofolio/[id]/page.tsx b/src/app/dev/investasi/detail/portofolio/[id]/page.tsx index 7a3e4524..286d1a78 100644 --- a/src/app/dev/investasi/detail/portofolio/[id]/page.tsx +++ b/src/app/dev/investasi/detail/portofolio/[id]/page.tsx @@ -1,15 +1,21 @@ +import { funGetUserIdByToken } from "@/app_modules/_global/fun/get"; import { investasi_funGetOneInvestasiById } from "@/app_modules/investasi/_fun"; import { Investasi_UiDetailPortofolio } from "@/app_modules/investasi/_ui"; export default async function Page({ params }: { params: { id: string } }) { const investasiId = params.id; + const userLoginId = await funGetUserIdByToken(); + const dataPortofolio = await investasi_funGetOneInvestasiById({ investasiId, }); - + return ( <> - + ); } diff --git a/src/app/dev/investasi/detail/daftar-dokumen/[id]/page.tsx b/src/app/dev/investasi/dokumen/daftar/[id]/page.tsx similarity index 70% rename from src/app/dev/investasi/detail/daftar-dokumen/[id]/page.tsx rename to src/app/dev/investasi/dokumen/daftar/[id]/page.tsx index 7da6559d..e9337215 100644 --- a/src/app/dev/investasi/detail/daftar-dokumen/[id]/page.tsx +++ b/src/app/dev/investasi/dokumen/daftar/[id]/page.tsx @@ -1,6 +1,5 @@ import { - investasi_funGetAllDocumentById, - investasi_funGetOneInvestasiById, + investasi_funGetAllDocumentById } from "@/app_modules/investasi/_fun"; import { Investasi_UiDaftarDokmen } from "@/app_modules/investasi/_ui"; @@ -13,7 +12,10 @@ export default async function Page({ params }: { params: { id: string } }) { return ( <> - + ); } diff --git a/src/app/dev/investasi/detail/rekap-dokumen/[id]/page.tsx b/src/app/dev/investasi/dokumen/rekap/[id]/page.tsx similarity index 66% rename from src/app/dev/investasi/detail/rekap-dokumen/[id]/page.tsx rename to src/app/dev/investasi/dokumen/rekap/[id]/page.tsx index 611813b5..074777ab 100644 --- a/src/app/dev/investasi/detail/rekap-dokumen/[id]/page.tsx +++ b/src/app/dev/investasi/dokumen/rekap/[id]/page.tsx @@ -1,10 +1,12 @@ import { investasi_funGetAllDocumentById } from "@/app_modules/investasi/_fun"; -import { Investasi_UiRekapDokumen } from "@/app_modules/investasi/_ui"; +import { Investasi_UiRekapDokumen } from "@/app_modules/investasi/_ui"; export default async function Page({ params }: { params: { id: string } }) { const investasiId = params.id; - const dataDokumen = await investasi_funGetAllDocumentById({ investasiId, page: 1 }); - + const dataDokumen = await investasi_funGetAllDocumentById({ + investasiId, + page: 1, + }); return ( <> diff --git a/src/app/lib/id-derectory.ts b/src/app/lib/id-derectory.ts index 06ad0090..86621585 100644 --- a/src/app/lib/id-derectory.ts +++ b/src/app/lib/id-derectory.ts @@ -4,12 +4,21 @@ const DIRECTORY_ID = { portofolio_logo: "cm0yjl6ug000310njwmk6j0tx", map_pin: "cm0yjq8up000710njv5klra32", map_image: "cm0yjqnxl000910njplqho07w", + + // Investasi investasi_image: "cm0yjs35h000b10njb35o12h1", investasi_bukti_transfer: "cm0yjsflu000d10njrc3lnqho", investasi_prospektus: "cm1soio74003p38bjyciwf1oy", investasi_dokumen: "cm21g2hxw004d10dpx8j16tt7", + investasi_berita: "cm21g2yzc004f10dpbtqdfcjb", + + // Donasi donasi_image: "cm0yk1coh000f10nj597a99kv", + donasi_temporary_image: "cm2dvxo48007t10dpmmustxa2", + donasi_cerita_image: "cm2dvy9bi007v10dpmatb5yiy", donasi_bukti_transfer: "cm0yk1pmh000h10njhi6m8b8t", + + // Job job_image: "cm0ypp6zl0003kp7jf59zuvjy", }; diff --git a/src/app/lib/router_hipmi/router_investasi.ts b/src/app/lib/router_hipmi/router_investasi.ts index cdf42d2e..7d185e12 100644 --- a/src/app/lib/router_hipmi/router_investasi.ts +++ b/src/app/lib/router_hipmi/router_investasi.ts @@ -8,7 +8,7 @@ export const NEW_RouterInvestasi = { * @param param status id | 1: Publish, 2: Review, 3: Draft, 4: Reject * @type string */ - portofolio: ({ id }: { id: string }) => + portofolio: ({ id }: { id: "1" | "2" | "3" | "4" }) => `/dev/investasi/main/portofolio/${id}`, // TRANSAKSI @@ -29,14 +29,11 @@ export const NEW_RouterInvestasi = { OLD_file_view_dokumen: "/dev/investasi/file-view/dokumen/", // DETAIL + detail_main: ({ id }: { id: string }) => `/dev/investasi/detail/${id}`, detail_portofolio: ({ id }: { id: string }) => `/dev/investasi/detail/portofolio/${id}`, detail_prospektus: ({ id }: { id: string }) => `/dev/investasi/detail/prospektus/${id}`, - daftar_dokumen: ({ id }: { id: string }) => - `/dev/investasi/detail/daftar-dokumen/${id}`, - rekap_dokumen: ({ id }: { id: string }) => - `/dev/investasi/detail/rekap-dokumen/${id}`, detail_saham: "/dev/investasi/detail/saham/", detail_publish: "/dev/investasi/detail_portofolio/publish/", @@ -44,6 +41,39 @@ export const NEW_RouterInvestasi = { detail_draft: "/dev/investasi/detail_portofolio/draft/", detail_reject: "/dev/investasi/detail_portofolio/reject/", + // DOKUMEN + /** + * @param id | investasiId + * @type string + */ + daftar_dokumen: ({ id }: { id: string }) => + `/dev/investasi/dokumen/daftar/${id}`, + /** + * @param id | investasiId + * @type string + */ + rekap_dokumen: ({ id }: { id: string }) => + `/dev/investasi/dokumen/rekap/${id}`, + + // BERITA + /** + * @param id | beritaId + * @type string + */ + berita: ({ id }: { id: string }) => `/dev/investasi/berita/${id}`, + + /** + * @param id | investasiId + * @type string + */ + daftar_berita: ({ id }: { id: string }) => + `/dev/investasi/berita/daftar/${id}`, + /** + * @param id | investasiId + * @type string + */ + rekap_berita: ({ id }: { id: string }) => `/dev/investasi/berita/rekap/${id}`, + // CREATE /** * @param id | investasiId @@ -52,6 +82,13 @@ export const NEW_RouterInvestasi = { create_dokumen: ({ id }: { id: string }) => `/dev/investasi/create/dokumen/${id}`, + /** + * @param id | investasiId + * @type string + */ + create_berita: ({ id }: { id: string }) => + `/dev/investasi/create/berita/${id}`, + // EDIT /** * @param id | investasiId diff --git a/src/app_modules/donasi/component/card_view/card_publish.tsx b/src/app_modules/donasi/component/card_view/card_publish.tsx index ea33b270..5da3b8f0 100644 --- a/src/app_modules/donasi/component/card_view/card_publish.tsx +++ b/src/app_modules/donasi/component/card_view/card_publish.tsx @@ -1,21 +1,11 @@ "use client"; -import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; -import { AccentColor } from "@/app_modules/_global/color/color_pallet"; import { ComponentGlobal_CardLoadingOverlay, ComponentGlobal_CardStyles, + ComponentGlobal_LoadImageCustom, } from "@/app_modules/_global/component"; -import { - AspectRatio, - Card, - Grid, - Image, - Paper, - Progress, - Stack, - Text, -} from "@mantine/core"; +import { Grid, Progress, Stack, Text } from "@mantine/core"; import { useRouter } from "next/navigation"; import { useState } from "react"; import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur"; @@ -43,18 +33,13 @@ export default function ComponentDonasi_CardPublish({ > - - - - Foto - - + + - + diff --git a/src/app_modules/donasi/component/card_view/card_status.tsx b/src/app_modules/donasi/component/card_view/card_status.tsx index 32cf44a6..f19b165f 100644 --- a/src/app_modules/donasi/component/card_view/card_status.tsx +++ b/src/app_modules/donasi/component/card_view/card_status.tsx @@ -1,6 +1,10 @@ import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; import { AccentColor } from "@/app_modules/_global/color/color_pallet"; -import { ComponentGlobal_CardLoadingOverlay } from "@/app_modules/_global/component"; +import { + ComponentGlobal_CardLoadingOverlay, + ComponentGlobal_CardStyles, + ComponentGlobal_LoadImageCustom, +} from "@/app_modules/_global/component"; import { AspectRatio, Card, @@ -23,39 +27,24 @@ export function ComponentDonasi_CardStatus({ }) { const router = useRouter(); const [visible, setVisible] = useState(false); - const [donasiId, setDonasiId] = useState(""); return ( <> - { + { setVisible(true); - setDonasiId(data.id); router.push(path + `${data.id}`); }} > - - - - Foto - - + + - + {data.title} @@ -74,12 +63,24 @@ export function ComponentDonasi_CardStatus({ {/* {width > 575 ? "" : } */} - {visible && donasiId !== "" ? ( - - ) : ( - "" - )} - + {visible && } + + {/* { + setVisible(true); + router.push(path + `${data.id}`); + }} + > + + */} ); } diff --git a/src/app_modules/donasi/component/detail_galang_dana/detail_data_donasi.tsx b/src/app_modules/donasi/component/detail_galang_dana/detail_data_donasi.tsx index 855b98ec..520747ba 100644 --- a/src/app_modules/donasi/component/detail_galang_dana/detail_data_donasi.tsx +++ b/src/app_modules/donasi/component/detail_galang_dana/detail_data_donasi.tsx @@ -1,19 +1,16 @@ "use client"; +import { + MainColor +} from "@/app_modules/_global/color/color_pallet"; +import { + ComponentGlobal_CardStyles, + ComponentGlobal_LoadImageLandscape, +} from "@/app_modules/_global/component"; +import { Group, Stack, Text, Title } from "@mantine/core"; import { useRouter } from "next/navigation"; import { MODEL_DONASI } from "../../model/interface"; -import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; -import { - Stack, - AspectRatio, - Paper, - Title, - Group, - Image, - Text, -} from "@mantine/core"; import TampilanRupiahDonasi from "../tampilan_rupiah"; -import { AccentColor, MainColor } from "@/app_modules/_global/color/color_pallet"; export default function ComponentDonasi_DetailDataGalangDana({ donasi, @@ -23,28 +20,9 @@ export default function ComponentDonasi_DetailDataGalangDana({ const router = useRouter(); return ( <> - + - - Foto - + {donasi.title} Durasi: {donasi.DonasiMaster_Durasi.name} hari @@ -53,24 +31,30 @@ export default function ComponentDonasi_DetailDataGalangDana({ Dana dibutuhkan - + <Title + order={4} + style={{ + color: MainColor.yellow, + }} + > <TampilanRupiahDonasi nominal={+donasi.target} /> Kategori - + <Title + order={4} + style={{ + color: MainColor.yellow, + }} + > {donasi.DonasiMaster_Ketegori.name} - + ); } diff --git a/src/app_modules/donasi/component/detail_main/detail_data_donasi.tsx b/src/app_modules/donasi/component/detail_main/detail_data_donasi.tsx index 7ba87973..d346dce8 100644 --- a/src/app_modules/donasi/component/detail_main/detail_data_donasi.tsx +++ b/src/app_modules/donasi/component/detail_main/detail_data_donasi.tsx @@ -30,6 +30,10 @@ import { MODEL_DONASI } from "../../model/interface"; import { NotifPeringatan } from "../notifikasi/notif_peringatan"; import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur"; import TampilanRupiahDonasi from "../tampilan_rupiah"; +import { + ComponentGlobal_CardStyles, + ComponentGlobal_LoadImageLandscape, +} from "@/app_modules/_global/component"; export function ComponentDonasi_DetailDataMain({ donasi, @@ -47,23 +51,9 @@ export function ComponentDonasi_DetailDataMain({ return ( <> - + - - Foto - + {donasi?.title} @@ -179,7 +169,7 @@ export function ComponentDonasi_DetailDataMain({ - + ); } diff --git a/src/app_modules/donasi/create/create_cerita_penggalang.tsx b/src/app_modules/donasi/create/create_cerita_penggalang.tsx index 220b3f98..76ab9fca 100644 --- a/src/app_modules/donasi/create/create_cerita_penggalang.tsx +++ b/src/app_modules/donasi/create/create_cerita_penggalang.tsx @@ -1,41 +1,40 @@ "use client"; +import { DIRECTORY_ID } from "@/app/lib"; import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; -import { - AccentColor, - MainColor, -} from "@/app_modules/_global/color/color_pallet"; +import { MainColor } from "@/app_modules/_global/color/color_pallet"; +import { ComponentGlobal_BoxUploadImage } from "@/app_modules/_global/component"; import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information"; import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown"; import { - ComponentGlobal_WarningMaxUpload, - maksimalUploadFile, -} from "@/app_modules/_global/component/waring_popup"; + funGlobal_DeleteFileById, + funGlobal_UploadToStorage, +} from "@/app_modules/_global/fun"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; +import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin"; +import mqtt_client from "@/util/mqtt_client"; import { AspectRatio, Button, - Center, FileButton, + Group, Image, - Paper, Stack, Text, TextInput, Textarea, } from "@mantine/core"; -import { IconCamera } from "@tabler/icons-react"; +import { IconCamera, IconUpload } from "@tabler/icons-react"; import { useAtom } from "jotai"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import { NotifPeringatan } from "../component/notifikasi/notif_peringatan"; import { Donasi_funCreate } from "../fun/create/fun_create_donasi"; import { gs_donasi_hot_menu, gs_donasi_tabs_posting } from "../global_state"; import { MODEL_DONASI_TEMPORARY } from "../model/interface"; -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; -import mqtt_client from "@/util/mqtt_client"; -import notifikasiToAdmin_funCreate from "@/app_modules/notifikasi/fun/create/create_notif_to_admin"; + export default function CreateCeritaPenggalangDonasi({ dataTemporary, userId, @@ -51,7 +50,7 @@ export default function CreateCeritaPenggalangDonasi({ ); const [donasiHotMenu, setDonasiHotMenu] = useAtom(gs_donasi_hot_menu); - const [create, setCreate] = useState({ + const [data, setData] = useState({ pembukaan: "", cerita: "", namaBank: "", @@ -59,61 +58,77 @@ export default function CreateCeritaPenggalangDonasi({ }); const [temporary, setTemporary] = useState(dataTemporary); const [file, setFile] = useState(null); - const [imageCerita, setImageCerita] = useState(); + const [img, setImg] = useState(); async function onCreate() { - if (_.values(create).includes("")) return NotifPeringatan("Lengkapin Data"); - if (!file) return NotifPeringatan("Lengkapi Gambar"); - - const gambar = new FormData(); - gambar.append("file", file as any); + if (_.values(data).includes("")) + return ComponentGlobal_NotifikasiPeringatan("Lengkapin Data"); const body = { id: temporary.id, title: temporary.title, target: temporary.target, - imagesId: temporary.imagesId, donasiMaster_KategoriId: temporary.donasiMaster_KategoriId, donasiMaster_DurasiId: temporary.donasiMaster_DurasiId, authorId: userId, - namaBank: create.namaBank, - rekening: create.rekening, + namaBank: data.namaBank, + rekening: data.rekening, + imageId: temporary.imageId, CeritaDonasi: { - pembukaan: create.pembukaan, - cerita: create.cerita, + pembukaan: data.pembukaan, + cerita: data.cerita, }, }; - const res = await Donasi_funCreate(body as any, gambar); - if (res.status === 201) { - const dataNotif: any = { - appId: res.data?.id as any, - status: res.data?.DonasiMaster_Status?.name as any, - userId: res.data?.authorId as any, - pesan: res.data?.title as any, - kategoriApp: "DONASI", - title: "Donasi baru", - }; - - const notif = await notifikasiToAdmin_funCreate({ - data: dataNotif as any, + try { + setLoading(true); + const uploadImage = await funGlobal_UploadToStorage({ + file: file as File, + dirId: DIRECTORY_ID.donasi_cerita_image, + }); + if (!uploadImage.success) { + setLoading(false); + return ComponentGlobal_NotifikasiPeringatan("Gagal upload file gambar"); + } + + const res = await Donasi_funCreate({ + data: body as any, + fileId: uploadImage.data.id, }); - if (notif.status === 201) { - mqtt_client.publish( - "ADMIN", - JSON.stringify({ - count: 1, - }) - ); - setLoading(true); - setTabsPostingDonasi("Review"); - setDonasiHotMenu(1); - ComponentGlobal_NotifikasiBerhasil(res.message); - router.push(RouterDonasi.main_galang_dana, { scroll: false }); + if (res.status === 201) { + const dataNotif: any = { + appId: res.data?.id as any, + status: res.data?.DonasiMaster_Status?.name as any, + userId: res.data?.authorId as any, + pesan: res.data?.title as any, + kategoriApp: "DONASI", + title: "Donasi baru", + }; + + const notif = await notifikasiToAdmin_funCreate({ + data: dataNotif as any, + }); + + if (notif.status === 201) { + mqtt_client.publish( + "ADMIN", + JSON.stringify({ + count: 1, + }) + ); + setTabsPostingDonasi("Review"); + setDonasiHotMenu(1); + ComponentGlobal_NotifikasiBerhasil(res.message); + router.push(RouterDonasi.main_galang_dana, { scroll: false }); + } + setLoading(false); + } else { + ComponentGlobal_NotifikasiGagal(res.message); + setLoading(false); } - } else { - ComponentGlobal_NotifikasiGagal(res.message); + } catch (error) { + console.log(error); } } return ( @@ -138,15 +153,15 @@ export default function CreateCeritaPenggalangDonasi({ placeholder="Pembuka cerita" maxLength={300} onChange={(val) => - setCreate({ - ...create, + setData({ + ...data, pembukaan: val.target.value, }) } /> @@ -165,32 +180,49 @@ export default function CreateCeritaPenggalangDonasi({ placeholder="Ceritakan alasan mengapa harus membuat Penggalangan Dana" maxLength={300} onChange={(val) => - setCreate({ - ...create, + setData({ + ...data, cerita: val.target.value, }) } /> - -
+ + + {img ? ( + + Foto + + ) : ( + + + + Upload Gambar + + + )} + + + {/* Upload Foto */} + { + onChange={async (files: any) => { try { const buffer = URL.createObjectURL( new Blob([new Uint8Array(await files.arrayBuffer())]) ); - if (files.size > maksimalUploadFile) { - ComponentGlobal_WarningMaxUpload({}); - } else { - setImageCerita(buffer); - setFile(files); - } + setImg(buffer); + setFile(files); } catch (error) { console.log(error); } @@ -200,42 +232,17 @@ export default function CreateCeritaPenggalangDonasi({ {(props) => ( )} -
- - {imageCerita ? ( - - - Foto - - - ) : ( -
- - Upload poster atau gambar penggalangan ! - -
- )} +
@@ -252,8 +259,8 @@ export default function CreateCeritaPenggalangDonasi({ label="Nama Bank" maxLength={50} onChange={(val) => { - setCreate({ - ...create, + setData({ + ...data, namaBank: _.upperCase(val.target.value), }); }} @@ -269,8 +276,8 @@ export default function CreateCeritaPenggalangDonasi({ label="Nomor rekening" maxLength={100} onChange={(val) => { - setCreate({ - ...create, + setData({ + ...data, rekening: val.target.value, }); }} @@ -280,9 +287,7 @@ export default function CreateCeritaPenggalangDonasi({ style={{ transition: "0.5s", }} - disabled={ - _.values(create).includes("") || file === null ? true : false - } + disabled={_.values(data).includes("") || file === null ? true : false} loaderPosition="center" loading={isLoading ? true : false} w={"100%"} diff --git a/src/app_modules/donasi/create/create_donasi.tsx b/src/app_modules/donasi/create/create_donasi.tsx index 25aa128f..bee4fd8f 100644 --- a/src/app_modules/donasi/create/create_donasi.tsx +++ b/src/app_modules/donasi/create/create_donasi.tsx @@ -4,32 +4,27 @@ import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; import { AspectRatio, Button, - Center, FileButton, + Group, Image, - Paper, Select, Stack, Text, TextInput, } from "@mantine/core"; -import { IconCamera } from "@tabler/icons-react"; +import { IconCamera, IconUpload } from "@tabler/icons-react"; import { useAtom } from "jotai"; import { useRouter } from "next/navigation"; -import { - AccentColor, - MainColor, -} from "@/app_modules/_global/color/color_pallet"; +import { DIRECTORY_ID } from "@/app/lib"; +import { MainColor } from "@/app_modules/_global/color/color_pallet"; +import { ComponentGlobal_BoxUploadImage } from "@/app_modules/_global/component"; import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information"; -import { - ComponentGlobal_WarningMaxUpload, - maksimalUploadFile, -} from "@/app_modules/_global/component/waring_popup"; +import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import _ from "lodash"; import { useState } from "react"; -import { NotifPeringatan } from "../component/notifikasi/notif_peringatan"; import Donasi_funCreateTemporary from "../fun/create/fun_create_donasi_temporary"; import { gs_donasi_tabs_posting } from "../global_state"; import { MODEL_DONASI_ALL_MASTER } from "../model/interface"; @@ -46,7 +41,7 @@ export default function CreateDonasi({ const [kategori, setKategori] = useState(masterKategori); const [durasi, setDurasi] = useState(masterDurasi); - const [create, setCreate] = useState({ + const [data, setData] = useState({ kategoriId: "", title: "", target: "", @@ -54,34 +49,48 @@ export default function CreateDonasi({ }); const [targetDana, setTargetDana] = useState(""); const [file, setFile] = useState(null); - const [imageDonasi, setImageDonasi] = useState(); + const [img, setImg] = useState(); const [tabsPostingDonasi, setTabsPostingDonasi] = useAtom( gs_donasi_tabs_posting ); async function onCreate() { + setLoading(true); const body = { - donasiMaster_KategoriId: create.kategoriId, - donasiMaster_DurasiId: create.durasiId, - title: create.title, + donasiMaster_KategoriId: data.kategoriId, + donasiMaster_DurasiId: data.durasiId, + title: data.title, target: targetDana, }; - if (_.values(body).includes("")) return NotifPeringatan("Lengkapin Data"); - if (!file) return NotifPeringatan("Lengkapi Gambar"); + if (_.values(body).includes("")) + return ComponentGlobal_NotifikasiPeringatan("Lengkapin Data"); - const gambar = new FormData(); - gambar.append("file", file as any); + try { + const uploadImage = await funGlobal_UploadToStorage({ + file: file as File, + dirId: DIRECTORY_ID.donasi_image, + }); + if (!uploadImage.success) { + setLoading(false); + return ComponentGlobal_NotifikasiPeringatan("Gagal upload file gambar"); + } - await Donasi_funCreateTemporary(body as any, gambar).then((res) => { + const res = await Donasi_funCreateTemporary({ + data: body as any, + fileId: uploadImage.data.id, + }); if (res.status === 201) { - setLoading(true); setTabsPostingDonasi("Review"); router.push(RouterDonasi.create_cerita_penggalang + `${res.donasiId}`); + setLoading(false); } else { - return ComponentGlobal_NotifikasiGagal(res.message); + ComponentGlobal_NotifikasiGagal(res.message); + setLoading(false); } - }); + } catch (error) { + console.log(error); + } } return ( @@ -102,8 +111,8 @@ export default function CreateDonasi({ label: e.name, }))} onChange={(val: string) => - setCreate({ - ...create, + setData({ + ...data, kategoriId: val, }) } @@ -121,7 +130,7 @@ export default function CreateDonasi({ placeholder="Contoh: Renovasi Masjid pada kampung, dll" maxLength={100} onChange={(val) => { - setCreate({ ...create, title: val.target.value }); + setData({ ...data, title: val.target.value }); }} /> { // console.log(val.currentTarget.value, "nilai"); const match = val.currentTarget.value @@ -143,8 +152,8 @@ export default function CreateDonasi({ .match(/^[0-9]+$/); if (val.currentTarget.value === "") - return setCreate({ - ...create, + return setData({ + ...data, target: 0 + "", }); if (!match?.[0]) return null; @@ -153,8 +162,8 @@ export default function CreateDonasi({ const target = Intl.NumberFormat("id-ID").format(+nilai); setTargetDana(nilai); - setCreate({ - ...create, + setData({ + ...data, target, }); }} @@ -172,25 +181,41 @@ export default function CreateDonasi({ value: e.id, label: e.name + " " + `hari`, }))} - onChange={(val: string) => setCreate({ ...create, durasiId: val })} + onChange={(val: string) => setData({ ...data, durasiId: val })} /> -
+ + {img ? ( + + Foto + + ) : ( + + + + Upload Gambar + + + )} + + + {/* Upload Foto */} + { + onChange={async (files: any) => { try { const buffer = URL.createObjectURL( new Blob([new Uint8Array(await files.arrayBuffer())]) ); - - if (files.size > maksimalUploadFile) { - ComponentGlobal_WarningMaxUpload({}); - } else { - setImageDonasi(buffer); - setFile(files); - } + setImg(buffer); + setFile(files); } catch (error) { console.log(error); } @@ -200,49 +225,24 @@ export default function CreateDonasi({ {(props) => ( )} -
- {imageDonasi ? ( - - - Foto - - - ) : ( -
- - Upload poster atau gambar penggalangan ! - -
- )} +
+ + } + buttonKanan={ + + } + /> + + ); +} diff --git a/src/app_modules/investasi/_ui/detail/ui_daftar_berita.tsx b/src/app_modules/investasi/_ui/detail/ui_daftar_berita.tsx new file mode 100644 index 00000000..350bcaf6 --- /dev/null +++ b/src/app_modules/investasi/_ui/detail/ui_daftar_berita.tsx @@ -0,0 +1,21 @@ +"use client"; + +import { + UIGlobal_LayoutHeaderTamplate, + UIGlobal_LayoutTamplate, +} from "@/app_modules/_global/ui"; +import { Investasi_ViewDaftarBerita } from "../../_view"; + +export function Investasi_UiDaftarBerita({ + dataBerita, +}: { + dataBerita: any[]; +}) { + return ( + } + > + + + ); +} diff --git a/src/app_modules/investasi/_ui/detail/ui_detail_main.tsx b/src/app_modules/investasi/_ui/detail/ui_detail_main.tsx new file mode 100644 index 00000000..94bfc7b1 --- /dev/null +++ b/src/app_modules/investasi/_ui/detail/ui_detail_main.tsx @@ -0,0 +1,79 @@ +"use client"; + +import { + UIGlobal_Drawer, + UIGlobal_LayoutHeaderTamplate, + UIGlobal_LayoutTamplate, +} from "@/app_modules/_global/ui"; +import { ActionIcon } from "@mantine/core"; +import { IconCategoryPlus, IconDotsVertical } from "@tabler/icons-react"; +import { MODEL_INVESTASI } from "../../_lib/interface"; +import { Investasi_ViewDetailPublish } from "../../_view"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { + NEW_RouterInvestasi, + RouterInvestasi_OLD, +} from "@/app/lib/router_hipmi/router_investasi"; +import { IconDeviceIpadPlus } from "@tabler/icons-react"; + +export function Investasi_UiDetailMain({ + dataInvestasi, + userLoginId, +}: { + dataInvestasi: MODEL_INVESTASI; + userLoginId: string; +}) { + const router = useRouter(); + const [openDrawer, setOpenDrawer] = useState(false); + + const listPage = [ + { + id: "1", + name: "Tambah & Edit Dokumen", + icon: , + path: NEW_RouterInvestasi.rekap_dokumen({ id: dataInvestasi.id }), + }, + { + id: "2", + name: "Tambah & Edit Berita", + icon: , + path: NEW_RouterInvestasi.rekap_berita({ id: dataInvestasi.id }), + }, + ]; + + return ( + <> + setOpenDrawer(true)} + > + + + ) : ( + + ) + } + /> + } + > + + + + setOpenDrawer(false)} + component={listPage} + /> + + ); +} diff --git a/src/app_modules/investasi/_ui/detail/ui_detail_portofolio.tsx b/src/app_modules/investasi/_ui/detail/ui_detail_portofolio.tsx index 83bbfa07..3d8692ff 100644 --- a/src/app_modules/investasi/_ui/detail/ui_detail_portofolio.tsx +++ b/src/app_modules/investasi/_ui/detail/ui_detail_portofolio.tsx @@ -13,20 +13,23 @@ import { IconEdit, IconFilePencil, } from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; import { useState } from "react"; import { MODEL_INVESTASI } from "../../_lib/interface"; import { Investasi_ViewDetailDraft, - Investasi_ViewDetailPublish, Investasi_ViewDetailReject, Investasi_ViewDetailReview, } from "../../_view"; export function Investasi_UiDetailPortofolio({ data, + userLoginId, }: { data: MODEL_INVESTASI; + userLoginId: string; }) { + const router = useRouter(); const [openDrawer, setOpenDrawer] = useState(false); const listPage = [ { @@ -86,9 +89,12 @@ export function Investasi_UiDetailPortofolio({ /> } > - {data.masterStatusInvestasiId === "1" && ( - - )} + {/* {data.masterStatusInvestasiId === "1" && ( + + )} */} {data.masterStatusInvestasiId === "2" && ( diff --git a/src/app_modules/investasi/_ui/detail/ui_rekap_berita.tsx b/src/app_modules/investasi/_ui/detail/ui_rekap_berita.tsx new file mode 100644 index 00000000..5bad3146 --- /dev/null +++ b/src/app_modules/investasi/_ui/detail/ui_rekap_berita.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { + UIGlobal_Drawer, + UIGlobal_LayoutHeaderTamplate, + UIGlobal_LayoutTamplate, +} from "@/app_modules/_global/ui"; +import { ActionIcon } from "@mantine/core"; +import { IconCirclePlus, IconDotsVertical } from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { Investasi_ViewRekapBerita } from "../../_view"; +import { NEW_RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; + +export function Investasi_UiRekapBerita({ + investasiId, + dataBerita, +}: { + investasiId: string; + dataBerita: any[] +}) { + const router = useRouter(); + const [openDrawer, setOpenDrawer] = useState(false); + + const listPage = [ + { + id: "1", + name: "Tambah Berita", + icon: , + path: NEW_RouterInvestasi.create_berita({ id: investasiId }), + }, + ]; + + return ( + { + setOpenDrawer(true); + }} + > + + + } + /> + } + > + + + + + setOpenDrawer(false)} + component={listPage} + /> + + ); +} diff --git a/src/app_modules/investasi/_ui/index.ts b/src/app_modules/investasi/_ui/index.ts index daedb9bc..65b18d7b 100644 --- a/src/app_modules/investasi/_ui/index.ts +++ b/src/app_modules/investasi/_ui/index.ts @@ -19,6 +19,11 @@ import { Investasi_UiEditInvestasi } from "./edit/ui_edit_investasi"; import { Investasi_UiEditProspektus } from "./edit/ui_edit_prospektus"; import { Investasi_UiCreateDocument } from "./create/ui_create_document"; import { Investasi_UiRekapDokumen } from "./detail/ui_rekap_dokumen"; +import { Investasi_UiDetailMain } from "./detail/ui_detail_main"; +import { Investasi_UiDaftarBerita } from "./detail/ui_daftar_berita"; +import { Investasi_UiRekapBerita } from "./detail/ui_rekap_berita"; +import { Investasi_UiCreateBerita } from "./create/ui_create_berita"; +import { Investasi_UiDetailBerita } from "./detail/ui_berita"; export { Investasi_UiProsesPembelian }; export { Investasi_UiMetodePembayaran }; @@ -41,3 +46,8 @@ export { Investasi_UiEditInvestasi }; export { Investasi_UiEditProspektus }; export { Investasi_UiCreateDocument }; export { Investasi_UiRekapDokumen }; +export { Investasi_UiDetailMain }; +export { Investasi_UiDaftarBerita }; +export { Investasi_UiRekapBerita }; +export { Investasi_UiCreateBerita }; +export { Investasi_UiDetailBerita }; diff --git a/src/app_modules/investasi/_view/create/view_create_berita.tsx b/src/app_modules/investasi/_view/create/view_create_berita.tsx new file mode 100644 index 00000000..1b5067d2 --- /dev/null +++ b/src/app_modules/investasi/_view/create/view_create_berita.tsx @@ -0,0 +1,206 @@ +import { AccentColor, MainColor } from "@/app_modules/_global/color"; +import { + ComponentGlobal_BoxInformation, + ComponentGlobal_BoxUploadImage, + ComponentGlobal_InputCountDown, +} from "@/app_modules/_global/component"; +import { + ComponentGlobal_NotifikasiBerhasil, + ComponentGlobal_NotifikasiGagal, + ComponentGlobal_NotifikasiPeringatan, +} from "@/app_modules/_global/notif_global"; +import { + AspectRatio, + Button, + Center, + FileButton, + Image, + Stack, + Text, + TextInput, + Textarea, +} from "@mantine/core"; +import { IconCamera, IconUpload } from "@tabler/icons-react"; + +import { DIRECTORY_ID } from "@/app/lib"; +import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun"; +import { Prisma } from "@prisma/client"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { investasi_funCreateBerita } from "../../_fun"; + +export function Investasi_ViewCreateBerita({ + investasiId, +}: { + investasiId: string; +}) { + const router = useRouter(); + const [file, setFile] = useState(null); + const [img, setImg] = useState(); + const [isLoading, setIsLoading] = useState(false); + + const [data, setData] = useState({ + data: { + title: "", + deskripsi: "", + investasiId: investasiId, + }, + }); + + async function onCreate() { + if (data.data.title == "" || data.data.deskripsi == "") + return ComponentGlobal_NotifikasiPeringatan("Lengkapi data"); + + try { + setIsLoading(true); + if (file != null) { + const uploadFile = await funGlobal_UploadToStorage({ + file: file as File, + dirId: DIRECTORY_ID.investasi_berita, + }); + + if (!uploadFile.success) + return ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar"); + + const createWithFile = await investasi_funCreateBerita({ + data: data.data as any, + fileId: uploadFile.data.id, + }); + + createWithFile.status === 201 + ? (ComponentGlobal_NotifikasiBerhasil(createWithFile.message), + router.back()) + : ComponentGlobal_NotifikasiGagal(createWithFile.message); + } else { + const createNoFile = await investasi_funCreateBerita({ + data: data.data as any, + }); + + createNoFile.status === 201 + ? (ComponentGlobal_NotifikasiBerhasil(createNoFile.message), + router.back()) + : ComponentGlobal_NotifikasiGagal(createNoFile.message); + } + } catch (error) { + console.log(error); + } finally { + setIsLoading(false); + } + } + + return ( + <> + + + + + + {img ? ( + + Foto + + ) : ( + + + + Upload Gambar + + + )} + + +
+ { + try { + const buffer = URL.createObjectURL( + new Blob([new Uint8Array(await files.arrayBuffer())]) + ); + setImg(buffer); + setFile(files); + } catch (error) { + console.log(error); + } + }} + accept="image/png,image/jpeg" + > + {(props) => ( + + )} + +
+
+ + { + setData({ data: { ...data.data, title: val.target.value } }); + }} + /> + + +