diff --git a/package.json b/package.json index f3b6bbd9..58607d04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hipmi", - "version": "1.0.10", + "version": "1.0.11", "private": true, "prisma": { "seed": "npx tsx prisma/seed.ts" diff --git a/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx index ebac8439..96111822 100644 --- a/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx +++ b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx @@ -1,8 +1,9 @@ import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi"; -import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id"; +import { adminInvestasi_getOneById } from "@/app_modules/admin/investasi/fun"; export default async function Page({ params }: { params: { id: string } }) { - const dataInvestasi = await getOneInvestasiById(params.id); + const investasiId = params.id; + const dataInvestasi = await adminInvestasi_getOneById({investasiId}); // console.log(dataUser) return ( diff --git a/src/app/dev/admin/layout.tsx b/src/app/dev/admin/layout.tsx index 5f99cd73..40feb1d4 100644 --- a/src/app/dev/admin/layout.tsx +++ b/src/app/dev/admin/layout.tsx @@ -1,9 +1,8 @@ import { funGetUserIdByToken } from "@/app_modules/_global/fun/get"; +import { funGlobal_getUserById } from "@/app_modules/_global/fun/get/fun_get_user_by_id"; import { Admin_NewLayout } from "@/app_modules/admin"; -import { AdminLayout } from "@/app_modules/admin/main_dashboard"; import adminNotifikasi_countNotifikasi from "@/app_modules/admin/notifikasi/fun/count/count_is_read"; import adminNotifikasi_getByUserId from "@/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id"; -import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id"; import React from "react"; export default async function Layout({ @@ -13,7 +12,7 @@ export default async function Layout({ }) { const userLoginId = await funGetUserIdByToken(); - const dataUser = await user_getOneByUserId(userLoginId); + const dataUser = await funGlobal_getUserById({ userId: userLoginId }); const listNotif = await adminNotifikasi_getByUserId(); const countNotifikasi = await adminNotifikasi_countNotifikasi(); diff --git a/src/app/dev/admin/preview-image/[id]/page.tsx b/src/app/dev/admin/preview-image/[id]/page.tsx new file mode 100644 index 00000000..341d5396 --- /dev/null +++ b/src/app/dev/admin/preview-image/[id]/page.tsx @@ -0,0 +1,14 @@ +import { Admin_UiImagePreview } from "@/app_modules/admin/_admin_global"; +import React from "react"; + +async function Page({ params }: { params: { id: string } }) { + const fileId = params.id; + + return ( + <> + + + ); +} + +export default Page; diff --git a/src/app/dev/investasi/detail/portofolio/[id]/page.tsx b/src/app/dev/investasi/detail/portofolio/[id]/page.tsx index 286d1a78..d2c0c681 100644 --- a/src/app/dev/investasi/detail/portofolio/[id]/page.tsx +++ b/src/app/dev/investasi/detail/portofolio/[id]/page.tsx @@ -13,7 +13,7 @@ export default async function Page({ params }: { params: { id: string } }) { return ( <> diff --git a/src/app/lib/index.ts b/src/app/lib/index.ts index 1e89379c..4d002a66 100644 --- a/src/app/lib/index.ts +++ b/src/app/lib/index.ts @@ -3,6 +3,7 @@ import DIRECTORY_ID from "./id-derectory"; import prisma from "./prisma"; import { pathAssetImage } from "./path_asset_image"; import { RouterImagePreview } from "./router_hipmi/router_image_preview"; +import { RouterAdminGlobal } from "./router_admin/router_admin_global"; export { DIRECTORY_ID }; export { prisma }; @@ -11,3 +12,4 @@ export { pathAssetImage }; // Router export { RouterImagePreview }; +export { RouterAdminGlobal }; diff --git a/src/app/lib/router_admin/router_admin_global.ts b/src/app/lib/router_admin/router_admin_global.ts new file mode 100644 index 00000000..ad55bea2 --- /dev/null +++ b/src/app/lib/router_admin/router_admin_global.ts @@ -0,0 +1,7 @@ +export const RouterAdminGlobal = { + /** + * @param fileId | file id from wibu storage , atau bisa diambil di DB + * @type {string} + */ + preview_image: ({ id }: { id: string }) => `/dev/admin/preview-image/${id}`, +}; diff --git a/src/app_modules/_global/fun/get/fun_get_user_by_id.ts b/src/app_modules/_global/fun/get/fun_get_user_by_id.ts new file mode 100644 index 00000000..10fe6c38 --- /dev/null +++ b/src/app_modules/_global/fun/get/fun_get_user_by_id.ts @@ -0,0 +1,16 @@ +"use server"; + +import { prisma } from "@/app/lib"; + +export async function funGlobal_getUserById({ userId }: { userId: string }) { + const data = await prisma.user.findFirst({ + where: { + id: userId, + }, + include: { + Profile: true, + }, + }); + + return data; +} diff --git a/src/app_modules/admin/_admin_global/_component/comp_admin_load_image.tsx b/src/app_modules/admin/_admin_global/_component/comp_admin_load_image.tsx new file mode 100644 index 00000000..ffe21d3b --- /dev/null +++ b/src/app_modules/admin/_admin_global/_component/comp_admin_load_image.tsx @@ -0,0 +1,92 @@ +"use client"; + +import { APIs, RouterAdminGlobal } from "@/app/lib"; +import { pathAssetImage } from "@/app/lib/path_asset_image"; +import { Center, Image, Skeleton } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; + +export function Admin_ComponentLoadImageLandscape({ + fileId, +}: { + fileId: string; +}) { + const router = useRouter(); + const [isImage, setIsImage] = useState(null); + const [isLoading, setLoading] = useState(false); + const url = APIs.GET({ fileId: fileId }); + + useShallowEffect(() => { + onLoadImage(); + }, []); + + async function onLoadImage() { + try { + const res = await fetch(url); + if (res.ok) { + return setIsImage(true); + } + setIsImage(false); + } catch (error) { + console.log(error); + } + } + + if (isImage === null) return ; + + if (!isImage) + return ( + <> +
+ No Image +
+ + ); + + return ( + <> +
+ { + setLoading(true); + + router.push(RouterAdminGlobal.preview_image({ id: fileId }), { + scroll: false, + }); + }} + style={{ + borderColor: "white", + borderStyle: "solid", + borderWidth: "1px", + borderRadius: "5px", + }} + radius={"4px"} + height={200} + alt="Image" + opacity={isLoading ? 0.5 : 1} + src={url} + /> + {isLoading ? ( + Loader + ) : ( + "" + )} +
+ + ); +} diff --git a/src/app_modules/admin/_admin_global/_component/comp_admin_modal_report.tsx b/src/app_modules/admin/_admin_global/_component/comp_admin_modal_report.tsx new file mode 100644 index 00000000..c908e25c --- /dev/null +++ b/src/app_modules/admin/_admin_global/_component/comp_admin_modal_report.tsx @@ -0,0 +1,47 @@ +"use client"; + +import { Modal, Stack, Textarea, Group, Button } from "@mantine/core"; +import React from "react"; + +export function Admin_ComponentModalReport({ + opened, + onClose, + title, + onHandlerChange, + buttonKanan, + buttonKiri, +}: { + opened: any; + onClose: () => void; + title: string; + onHandlerChange: (val: any) => void; + buttonKanan: React.ReactNode; + buttonKiri: React.ReactNode; +}) { + return ( + <> + + +