diff --git a/src/app/api/collaboration/master/route.ts b/src/app/api/collaboration/master/route.ts new file mode 100644 index 00000000..fb1b53da --- /dev/null +++ b/src/app/api/collaboration/master/route.ts @@ -0,0 +1,20 @@ +import { prisma } from "@/app/lib"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export const dynamic = "force-dynamic"; +export async function GET(request: Request) { + try { + const data = await prisma.projectCollaborationMaster_Industri.findMany({}); + return NextResponse.json( + { success: true, message: "Berhasil mendapatkan data", data: data }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Master Collaboration:=========>", error); + return NextResponse.json( + { success: false, message: "Gagal mendapatkan data" }, + { status: 500 } + ); + } +} diff --git a/src/app/api/notifikasi/count/route.ts b/src/app/api/notifikasi/count/route.ts new file mode 100644 index 00000000..c54ea290 --- /dev/null +++ b/src/app/api/notifikasi/count/route.ts @@ -0,0 +1,28 @@ +import { prisma } from "@/app/lib"; +import { newFunGetUserId } from "@/app/lib/new_fun_user_id"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export const dynamic = "force-dynamic"; + +export async function GET(request: Request) { + try { + const userLoginId = await newFunGetUserId(); + + const count = await prisma.notifikasi.findMany({ + where: { + userId: userLoginId, + isRead: false, + userRoleId: "1", + }, + }); + + return NextResponse.json({ success: true, data: count.length }); + } catch (error) { + backendLogger.error("Gagal mendapatkan data count notifikasi", error); + return NextResponse.json( + { success: false, message: "Gagal mendapatkan data" }, + { status: 500 } + ); + } +} diff --git a/src/app/api/notifikasi/get-all-by-category/route.ts b/src/app/api/notifikasi/get-all-by-category/route.ts index b13ce671..bfa9aefd 100644 --- a/src/app/api/notifikasi/get-all-by-category/route.ts +++ b/src/app/api/notifikasi/get-all-by-category/route.ts @@ -7,37 +7,34 @@ import { NextResponse } from "next/server"; export const dynamic = "force-dynamic"; export async function GET(request: Request) { - if (request.method === "GET") { - try { - const { searchParams } = new URL(request.url); - const category = searchParams.get("category") as ICategoryapp; - const page = searchParams.get("page"); + try { + let fixData; + const { searchParams } = new URL(request.url); + const category = searchParams.get("category") as ICategoryapp; + const page = searchParams.get("page"); - const userLoginId = await newFunGetUserId(); - const fixPage = _.toNumber(page); - const takeData = 10; - const skipData = fixPage * takeData - takeData; + const userLoginId = await newFunGetUserId(); + const fixPage = _.toNumber(page); + const takeData = 10; + const skipData = fixPage * takeData - takeData; - if (category === "Semua") { - const data = await prisma.notifikasi.findMany({ - take: takeData, - skip: skipData, - orderBy: [ - { - isRead: "asc", - }, - { createdAt: "desc" }, - ], - where: { - userId: userLoginId, - userRoleId: "1", + if (category === "Semua") { + fixData = await prisma.notifikasi.findMany({ + take: takeData, + skip: skipData, + orderBy: [ + { + isRead: "asc", }, - }); - - return NextResponse.json({ success: true, data }); - } - - const allData = await prisma.notifikasi.findMany({ + { createdAt: "desc" }, + ], + where: { + userId: userLoginId, + userRoleId: "1", + }, + }); + } else { + fixData = await prisma.notifikasi.findMany({ take: takeData, skip: skipData, orderBy: [ @@ -52,12 +49,17 @@ export async function GET(request: Request) { kategoriApp: _.upperCase(category), }, }); - - return NextResponse.json({ success: true, data: allData }); - } catch (error) { - backendLogger.error("Error get data notifikasi: " + error); } - } else { - return NextResponse.json({ success: false, message: "Method not allowed" }); + + return NextResponse.json( + { success: true, data: fixData, message: "Berhasil mendapatkan data" }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Error get data notifikasi: " + error); + return NextResponse.json( + { success: false, message: "Gagal mendapatkan data" }, + { status: 500 } + ); } } diff --git a/src/app/api/notifikasi/master/route.ts b/src/app/api/notifikasi/master/route.ts new file mode 100644 index 00000000..27e4145e --- /dev/null +++ b/src/app/api/notifikasi/master/route.ts @@ -0,0 +1,35 @@ +import { prisma } from "@/app/lib"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export const dynamic = "force-dynamic"; + +export async function GET(request: Request) { + try { + const data = await prisma.masterKategoriApp.findMany({ + where: { + isActive: true, + }, + }); + + data.unshift({ + id: "0", + isActive: true, + createdAt: new Date(), + updatedAt: new Date(), + name: "Semua", + value: null, + }); + + return NextResponse.json( + { success: true, data, message: "Berhasil mendapatkan data" }, + { status: 200 } + ); + } catch (error) { + backendLogger.error("Master Notifikasi:", error); + return NextResponse.json( + { success: false, message: "Gagal mendapatkan data" }, + { status: 500 } + ); + } +} diff --git a/src/app/dev/(user)/home/page.tsx b/src/app/dev/(user)/home/page.tsx index 4bd78e32..c0fdc4c2 100644 --- a/src/app/dev/(user)/home/page.tsx +++ b/src/app/dev/(user)/home/page.tsx @@ -15,7 +15,7 @@ export default async function PageHome() { dataJob={dataJob as any} countNotifikasi={countNotifikasi} /> */} - + ); } diff --git a/src/app/dev/colab/create/page.tsx b/src/app/dev/colab/create/page.tsx index f1d84a65..6a530d6f 100644 --- a/src/app/dev/colab/create/page.tsx +++ b/src/app/dev/colab/create/page.tsx @@ -1,12 +1,9 @@ import { Colab_Create } from "@/app_modules/colab"; -import colab_funGetMasterIndustri from "@/app_modules/colab/fun/master/fun_get_master_industri"; export default async function Page() { - const listIndustri = await colab_funGetMasterIndustri(); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/collaboration/page.tsx b/src/app/dev/notifikasi/collaboration/page.tsx index edf580a3..ca9f64eb 100644 --- a/src/app/dev/notifikasi/collaboration/page.tsx +++ b/src/app/dev/notifikasi/collaboration/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiCollaboration } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Collaboration", - }); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/donasi/page.tsx b/src/app/dev/notifikasi/donasi/page.tsx index 9af63325..ca9f64eb 100644 --- a/src/app/dev/notifikasi/donasi/page.tsx +++ b/src/app/dev/notifikasi/donasi/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiDonasi } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Donasi", - }); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/event/page.tsx b/src/app/dev/notifikasi/event/page.tsx index 3b7b8e34..d4f0d3a1 100644 --- a/src/app/dev/notifikasi/event/page.tsx +++ b/src/app/dev/notifikasi/event/page.tsx @@ -1,11 +1,9 @@ -import { Notifikasi_UiEvent } from "@/app_modules/notifikasi/_ui"; +import Notifikasi_UiMain from "@/app_modules/notifikasi/_ui/ui_notifikasi"; export default async function Page() { - // - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/forum/page.tsx b/src/app/dev/notifikasi/forum/page.tsx index a27ffea2..ca9f64eb 100644 --- a/src/app/dev/notifikasi/forum/page.tsx +++ b/src/app/dev/notifikasi/forum/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiForum } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Forum", - }); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/investasi/page.tsx b/src/app/dev/notifikasi/investasi/page.tsx index d5704862..ca9f64eb 100644 --- a/src/app/dev/notifikasi/investasi/page.tsx +++ b/src/app/dev/notifikasi/investasi/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiDonasi, Notifikasi_UiInvestasi } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Investasi", - }); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/job/page.tsx b/src/app/dev/notifikasi/job/page.tsx index 029dbb80..ca9f64eb 100644 --- a/src/app/dev/notifikasi/job/page.tsx +++ b/src/app/dev/notifikasi/job/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiJob } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Job", - }); - return ( <> - + ); } diff --git a/src/app/dev/notifikasi/layout.tsx b/src/app/dev/notifikasi/layout.tsx index 8b1e90fc..9e9d2461 100644 --- a/src/app/dev/notifikasi/layout.tsx +++ b/src/app/dev/notifikasi/layout.tsx @@ -1,19 +1,15 @@ import { UIGlobal_LayoutHeaderTamplate } from "@/app_modules/_global/ui"; import { Notifikasi_UiNewLayout } from "@/app_modules/notifikasi/_ui"; -import { notifikasi_funGetKategoriApp } from "@/app_modules/notifikasi/fun/get/fun_get_kategori_app"; export default async function Layout({ children, }: { children: React.ReactNode; }) { - const masterKategori = await notifikasi_funGetKategoriApp(); - return ( <> } - masterKategori={masterKategori} > {children} diff --git a/src/app/dev/notifikasi/semua/page.tsx b/src/app/dev/notifikasi/semua/page.tsx index 2f691b3c..ca9f64eb 100644 --- a/src/app/dev/notifikasi/semua/page.tsx +++ b/src/app/dev/notifikasi/semua/page.tsx @@ -1,9 +1,9 @@ -import { Notifikasi_UiAll } from "@/app_modules/notifikasi/_ui"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { return ( <> - + ); } diff --git a/src/app/dev/notifikasi/voting/page.tsx b/src/app/dev/notifikasi/voting/page.tsx index 1dd4b042..ca9f64eb 100644 --- a/src/app/dev/notifikasi/voting/page.tsx +++ b/src/app/dev/notifikasi/voting/page.tsx @@ -1,15 +1,9 @@ -import { Notifikasi_UiVoting } from "@/app_modules/notifikasi/_ui"; -import notifikasi_getByUserId from "@/app_modules/notifikasi/fun/get/get_notifiaksi_by_id"; +import { Notifikasi_UiMain } from "@/app_modules/notifikasi/_ui"; export default async function Page() { - const listNotifikasi = await notifikasi_getByUserId({ - page: 1, - kategoriApp: "Voting", - }); - return ( <> - + ); } diff --git a/src/app/lib/api_user_router/route_api_notifikasi.ts b/src/app/lib/api_user_router/route_api_notifikasi.ts index 94027735..0fccc1b0 100644 --- a/src/app/lib/api_user_router/route_api_notifikasi.ts +++ b/src/app/lib/api_user_router/route_api_notifikasi.ts @@ -8,4 +8,8 @@ export const API_RouteNotifikasi = { category: ICategoryapp; page: number; }) => `/api/notifikasi/get-all-by-category?category=${category}&page=${page}`, + + get_master_kategori: () => `/api/notifikasi/master`, + + get_count_by_id: () => `/api/notifikasi/count`, }; diff --git a/src/app/lib/global_state.ts b/src/app/lib/global_state.ts index 59259c1c..e49b6643 100644 --- a/src/app/lib/global_state.ts +++ b/src/app/lib/global_state.ts @@ -42,7 +42,7 @@ export type IRealtimeData = { export const gs_realtimeData = atom(null); export const gs_admin_ntf = atom(0); export const gs_user_ntf = atom(0); -export const gs_count_ntf = atom(0); +export const gs_count_ntf = atom(null); // job export const gs_adminJob_triggerReview = atom(false); diff --git a/src/app/lib/prisma.ts b/src/app/lib/prisma.ts index 101fd93b..07ccb3e8 100644 --- a/src/app/lib/prisma.ts +++ b/src/app/lib/prisma.ts @@ -25,6 +25,6 @@ process.on("SIGINT", async () => { process.exit(0); }); -// console.log("==> Test prisma"); +console.log("==> Test prisma"); export default prisma; diff --git a/src/app_modules/colab/component/index.ts b/src/app_modules/colab/component/index.ts new file mode 100644 index 00000000..e17745cf --- /dev/null +++ b/src/app_modules/colab/component/index.ts @@ -0,0 +1,3 @@ +import { Collaboration_SkeletonCreate } from "./skeleton_view"; + +export { Collaboration_SkeletonCreate }; diff --git a/src/app_modules/colab/component/lib/api_collaboration.ts b/src/app_modules/colab/component/lib/api_collaboration.ts new file mode 100644 index 00000000..bfffe8d5 --- /dev/null +++ b/src/app_modules/colab/component/lib/api_collaboration.ts @@ -0,0 +1,4 @@ +export async function apiGetMasterCollaboration() { + const data = await fetch(`/api/collaboration/master`); + return await data.json().catch(() => null); +} diff --git a/src/app_modules/colab/component/skeleton_view.tsx b/src/app_modules/colab/component/skeleton_view.tsx new file mode 100644 index 00000000..1061a1af --- /dev/null +++ b/src/app_modules/colab/component/skeleton_view.tsx @@ -0,0 +1,28 @@ +import { Skeleton, Stack } from "@mantine/core"; + +export function Collaboration_SkeletonCreate() { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/src/app_modules/colab/create/index.tsx b/src/app_modules/colab/create/index.tsx index 32c32541..b28e3236 100644 --- a/src/app_modules/colab/create/index.tsx +++ b/src/app_modules/colab/create/index.tsx @@ -5,7 +5,15 @@ import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/inpu import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; -import { Button, Select, Stack, TextInput, Textarea } from "@mantine/core"; +import { + Button, + Center, + Select, + Stack, + TextInput, + Textarea, + Loader, +} from "@mantine/core"; import { useRouter } from "next/navigation"; import { useState } from "react"; import colab_funCreateProyek from "../fun/create/fun_create_proyek"; @@ -13,12 +21,12 @@ import { MODEL_COLLABORATION_MASTER } from "../model/interface"; import mqtt_client from "@/util/mqtt_client"; import { useHookstate } from "@hookstate/core"; import { useGsCollabCreate } from "../global_state/state"; +import { useShallowEffect } from "@mantine/hooks"; +import { apiGetMasterCollaboration } from "../component/lib/api_collaboration"; +import { clientLogger } from "@/util/clientLogger"; +import { Collaboration_SkeletonCreate } from "../component"; -export default function Colab_Create({ - listIndustri, -}: { - listIndustri: MODEL_COLLABORATION_MASTER[]; -}) { +export default function Colab_Create() { const [value, setValue] = useState({ title: "", lokasi: "", @@ -27,9 +35,38 @@ export default function Colab_Create({ projectCollaborationMaster_IndustriId: 0, // jumlah_partisipan: 0, }); + + const [listIndustri, setListIndustri] = useState< + MODEL_COLLABORATION_MASTER[] | null + >(null); + + useShallowEffect(() => { + onLoadMaster(); + }, []); + + async function onLoadMaster() { + try { + const respone = await apiGetMasterCollaboration(); + if (respone.success) { + setListIndustri(respone.data); + } + } catch (error) { + clientLogger.error("Error get master collaboration", error); + } + } + + + if (listIndustri == null) { + return ( + <> + + + ); + } + return ( <> - + -