diff --git a/src/app/api/seeder/route.ts b/src/app/api/seeder/route.ts index a4e8b71d..5f2a0fd7 100644 --- a/src/app/api/seeder/route.ts +++ b/src/app/api/seeder/route.ts @@ -43,23 +43,23 @@ export async function GET(req: Request) { }); } - // for (let i of userSeeder) { - // await prisma.user.upsert({ - // where: { - // nomor: i.nomor, - // }, - // create: { - // nomor: i.nomor, - // username: i.name, - // masterUserRoleId: i.masterUserRoleId, - // }, - // update: { - // nomor: i.nomor, - // username: i.name, - // masterUserRoleId: i.masterUserRoleId, - // }, - // }); - // } + for (let i of userSeeder) { + await prisma.user.upsert({ + where: { + nomor: i.nomor, + }, + create: { + nomor: i.nomor, + username: i.name, + masterUserRoleId: i.masterUserRoleId, + }, + update: { + nomor: i.nomor, + username: i.name, + masterUserRoleId: i.masterUserRoleId, + }, + }); + } for (let i of bidangBisnis) { await prisma.masterBidangBisnis.upsert({ diff --git a/src/app/dev/admin/layout.tsx b/src/app/dev/admin/layout.tsx index 5e041dce..c2e6b65b 100644 --- a/src/app/dev/admin/layout.tsx +++ b/src/app/dev/admin/layout.tsx @@ -1,4 +1,6 @@ import { AdminLayout } from "@/app_modules/admin/main_dashboard"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; +import { user_getOneById } from "@/app_modules/home/fun/get/get_one_user_by_id"; import React from "react"; export default async function Layout({ @@ -6,9 +8,13 @@ export default async function Layout({ }: { children: React.ReactNode; }) { + const userId = await User_getUserId() + const dataUser = await user_getOneById(userId) + const userRole = dataUser?.masterUserRoleId + return ( <> - {children} + {children} ); } diff --git a/src/app/dev/home/page.tsx b/src/app/dev/home/page.tsx index 017f267d..90c933b3 100644 --- a/src/app/dev/home/page.tsx +++ b/src/app/dev/home/page.tsx @@ -4,10 +4,15 @@ import { unsealData } from "iron-session"; import _ from "lodash"; import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; import { user_getOneById } from "@/app_modules/home/fun/get/get_one_user_by_id"; +import { redirect } from "next/navigation"; +import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin"; export default async function Page() { const userId = await User_getUserId(); const dataUser = await user_getOneById(userId); + + if (dataUser?.masterUserRoleId === "2" || dataUser?.masterUserRoleId === "3") + return redirect(RouterAdminDashboard.splash_admin); // await new Promise((a, b) => { // setTimeout(a, 4000); // }); diff --git a/src/app_modules/admin/component/logout.tsx b/src/app_modules/admin/component/logout.tsx index 510007fd..02e875f7 100644 --- a/src/app_modules/admin/component/logout.tsx +++ b/src/app_modules/admin/component/logout.tsx @@ -7,29 +7,30 @@ import { useAtom } from "jotai"; import { IconLogout } from "@tabler/icons-react"; import { Warna } from "@/app/lib/warna"; import { useDisclosure } from "@mantine/hooks"; -import { gs_nomor, gs_otp } from "@/app_modules/auth/state/state"; +import { gs_kodeId, gs_nomor, gs_otp } from "@/app_modules/auth/state/state"; +import { auth_Logout } from "@/app_modules/auth/fun/fun_logout"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; +import { useState } from "react"; export default function Admin_Logout() { const router = useRouter(); - const [nomor, setnomor] = useAtom(gs_nomor); - const [code, setCode] = useAtom(gs_otp); - const [opened, { toggle }] = useDisclosure(false); - const onLogout = async () => { - router.push("/dev/auth/login"); + const [kodeId, setKodeId] = useAtom(gs_kodeId); + const [loadingLogout, setLoadingLogout] = useState(false); - // await fetch(ApiHipmi.logout) - // .then((res) => res.json()) - // .then((val) => { - // if (val.status == 200) { - // setnomor(null); - // setCode(null); - - // router.push("/dev/auth/login"); - // } - // }); - }; + async function onClickLogout() { + await auth_Logout(kodeId).then((res) => { + if (res.status === 200) { + setLoadingLogout(true); + ComponentGlobal_NotifikasiBerhasil(res.message); + setKodeId(""); + } else { + ComponentGlobal_NotifikasiPeringatan(res.message); + } + }); + } return ( <> @@ -42,10 +43,12 @@ export default function Admin_Logout() { diff --git a/src/app_modules/admin/layout.tsx b/src/app_modules/admin/layout.tsx index ab809327..5260d821 100644 --- a/src/app_modules/admin/layout.tsx +++ b/src/app_modules/admin/layout.tsx @@ -24,8 +24,10 @@ import React, { useState } from "react"; import ComponentGlobal_HeaderTamplate from "../component_global/header_tamplate"; import { useDisclosure } from "@mantine/hooks"; import { + IconCheck, IconCircleDot, IconCircleDotFilled, + IconDashboard, IconHome, IconLetterH, IconLogout, @@ -47,10 +49,16 @@ import _ from "lodash"; import { listAdminPage } from "./list_page"; import { RouterAdminVote } from "@/app/lib/router_admin/router_admin_vote"; import { RouterAdminJob } from "@/app/lib/router_admin/router_admin_job"; +import { gs_kodeId } from "../auth/state/state"; +import { auth_Logout } from "../auth/fun/fun_logout"; +import { ComponentGlobal_NotifikasiBerhasil } from "../component_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiPeringatan } from "../component_global/notif_global/notifikasi_peringatan"; export default function AdminLayout({ + userRole, children, }: { + userRole: string; children: React.ReactNode; }) { const theme = useMantineTheme(); @@ -59,6 +67,21 @@ export default function AdminLayout({ const [active, setActive] = useAtom(gs_admin_hotMenu); const [activeChild, setActiveChild] = useAtom(gs_admin_subMenu); const [loading, setLoading] = useState(false); + const [kodeId, setKodeId] = useAtom(gs_kodeId); + + async function onClickLogout() { + // await auth_Logout(kodeId).then((res) => { + // ComponentGlobal_NotifikasiBerhasil("Berhasil Logout"); + // }); + await auth_Logout(kodeId).then((res) => { + if (res.status === 200) { + ComponentGlobal_NotifikasiBerhasil(res.message); + setKodeId(""); + } else { + ComponentGlobal_NotifikasiPeringatan(res.message); + } + }); + } const navbarItems = listAdminPage.map((e, i) => ( @@ -117,6 +140,79 @@ export default function AdminLayout({ )); + const bukanDeveloper = listAdminPage.slice(0, -1); + const notAdminDev = bukanDeveloper.map((e) => ( + + : e.icon : e.icon + e.icon + } + label={{e.name}} + onClick={() => { + setLoading(true); + setActive(e.id); + setActiveChild(null); + e.path === "" ? router.push(e.child[0].path) : router.push(e.path); + e.path === "" ? setActiveChild(e.child[0].id) : ""; + }} + > + {_.isEmpty(e.child) ? ( + "" + ) : ( + + {e.child.map((v, ii) => ( + + {v.name}} + icon={ + activeChild === v.id ? ( + + ) : ( + + ) + } + onClick={() => { + setActive(e.id); + setActiveChild(v.id); + router.push(v.path); + }} + /> + + ))} + + )} + + + )); + + const navbarAdmin = ( + + } + label="Developer" + sx={{ + ":hover": { + backgroundColor: "transparent", + }, + }} + /> + + ); + return ( <> - {navbarItems} + + + {userRole === "3" ? navbarItems : notAdminDev} + {/* } label="Create Admin" /> */} + + } diff --git a/src/app_modules/admin/list_page.tsx b/src/app_modules/admin/list_page.tsx index 8a72b837..cf051ac8 100644 --- a/src/app_modules/admin/list_page.tsx +++ b/src/app_modules/admin/list_page.tsx @@ -7,7 +7,7 @@ import { RouterAdminDonasi, RouterAdminInvestasi, } from "@/app/lib/router_hipmi/router_admin"; -import { IconBriefcase, IconMessages } from "@tabler/icons-react"; +import { IconBriefcase, IconDashboard, IconMessages } from "@tabler/icons-react"; import { IconHeartHandshake, IconHome, @@ -171,4 +171,11 @@ export const listAdminPage = [ // }, ], }, + { + id: 99, + name: "Developer", + path: RouterAdminDashboard.main_admin, + icon: , + child: [], + }, ]; diff --git a/src/app_modules/auth/fun/fun_login.ts b/src/app_modules/auth/fun/fun_login.ts index ae9d2526..204680f1 100644 --- a/src/app_modules/auth/fun/fun_login.ts +++ b/src/app_modules/auth/fun/fun_login.ts @@ -5,6 +5,7 @@ import { randomOTP } from "./rondom_otp"; export async function auth_funLogin(nomor: string) { const codeOtp = randomOTP(); + console.log(nomor) try { const res = await fetch( diff --git a/src/app_modules/auth/fun/fun_logout.ts b/src/app_modules/auth/fun/fun_logout.ts index 6312472b..60f8a143 100644 --- a/src/app_modules/auth/fun/fun_logout.ts +++ b/src/app_modules/auth/fun/fun_logout.ts @@ -21,6 +21,6 @@ export async function auth_Logout(kodeId: string) { }); if (!del) return { status: 400, message: "Gagal Hapus Kode OTP Id"}; - revalidatePath("/dev/katalog") + // revalidatePath("/dev/katalog") return { status: 200, message: "Logout Berhasil" }; } diff --git a/src/app_modules/auth/fun/fun_validasi.ts b/src/app_modules/auth/fun/fun_validasi.ts index 3a4c5bd6..d3f856ea 100644 --- a/src/app_modules/auth/fun/fun_validasi.ts +++ b/src/app_modules/auth/fun/fun_validasi.ts @@ -18,6 +18,7 @@ export async function auth_funValidasi(nomor: string) { id: true, nomor: true, username: true, + masterUserRoleId: true }, }); @@ -42,5 +43,7 @@ export async function auth_funValidasi(nomor: string) { revalidatePath(RouterHome.main_home); } - return { status: 200, message: "Nomor Terverivikasi" }; + + + return { status: 200, message: "Nomor Terverivikasi", role: cek.masterUserRoleId }; } diff --git a/src/app_modules/auth/login/view.tsx b/src/app_modules/auth/login/view.tsx index 11af4f84..485b71dc 100644 --- a/src/app_modules/auth/login/view.tsx +++ b/src/app_modules/auth/login/view.tsx @@ -39,9 +39,11 @@ export default function Login() { // return ComponentGlobal_NotifikasiPeringatan("Nomor maximal 13 digit"); const nomorHp = phone.substring(1); + // console.log(nomorHp) await auth_funLogin(nomorHp).then((res) => { if (res.status === 200) { + setLoading(true); ComponentGlobal_NotifikasiBerhasil(res.message, 2000); setKodeId(res.kodeOtpId); router.push(RouterAuth.validasi + res.kodeOtpId); @@ -130,7 +132,6 @@ export default function Login() { color={"teal"} onClick={() => { onLogin(); - setLoading(true); }} loading={loading ? true : false} loaderPosition="center" diff --git a/src/app_modules/auth/validasi/view.tsx b/src/app_modules/auth/validasi/view.tsx index 439335a8..8ee21057 100644 --- a/src/app_modules/auth/validasi/view.tsx +++ b/src/app_modules/auth/validasi/view.tsx @@ -35,6 +35,7 @@ import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_glob import { RouterAuth } from "@/app/lib/router_hipmi/router_auth"; import { RouterHome } from "@/app/lib/router_hipmi/router_home"; import { auth_funEditAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id"; +import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin"; export default function Validasi({ dataOtp }: { dataOtp: any }) { const router = useRouter(); @@ -85,8 +86,12 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) { if (res.status === 200) { await auth_funEditAktivasiKodeOtpById(dataOtp.id).then((val) => { if (val.status === 200) { - ComponentGlobal_NotifikasiBerhasil(res.message); - router.push(RouterHome.main_home); + if (res.role === "1") { + ComponentGlobal_NotifikasiBerhasil(res.message); + router.push(RouterHome.main_home); + } else { + router.push(RouterAdminDashboard.splash_admin) + } } else { ComponentGlobal_NotifikasiPeringatan(val.message); } @@ -183,7 +188,7 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) { color={"teal"} onClick={() => { onVerifikasi(); - setLoading(true) + setLoading(true); }} > VERIFIKASI diff --git a/src/app_modules/home/fun/get/get_one_user_by_id.ts b/src/app_modules/home/fun/get/get_one_user_by_id.ts index 132fb4a0..50d287ea 100644 --- a/src/app_modules/home/fun/get/get_one_user_by_id.ts +++ b/src/app_modules/home/fun/get/get_one_user_by_id.ts @@ -10,6 +10,7 @@ export async function user_getOneById(userId: string) { select: { id: true, username: true, + masterUserRoleId: true, Profile: true, }, }); diff --git a/src/app_modules/katalog/main/layout.tsx b/src/app_modules/katalog/main/layout.tsx index 883415fc..77d1ee95 100644 --- a/src/app_modules/katalog/main/layout.tsx +++ b/src/app_modules/katalog/main/layout.tsx @@ -1,7 +1,14 @@ "use client"; import { Logout } from "@/app_modules/auth"; -import { ActionIcon, AppShell, Group, Header, Text } from "@mantine/core"; +import { + ActionIcon, + AppShell, + Group, + Header, + Text, + Title, +} from "@mantine/core"; import { IconUserSearch, IconAward, @@ -9,11 +16,14 @@ import { IconArrowLeft, IconPencilPlus, IconChevronLeft, + IconDashboard, } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; import ComponentKatalog_HeaderTamplate from "../component/header_tamplate"; import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; import { RouterHome } from "@/app/lib/router_hipmi/router_home"; +import { title } from "process"; +import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin"; export default function KatalogLayout({ children, @@ -27,12 +37,34 @@ export default function KatalogLayout({ <> + // +
+ + { + router.back(); + }} + > + + + + Katalog + + + {/* router.push(RouterAdminDashboard.splash_admin)} + > + + */} + +
} > {children} diff --git a/src/bin/seeder/user_seeder.json b/src/bin/seeder/user_seeder.json index e83e8c96..645e3d58 100644 --- a/src/bin/seeder/user_seeder.json +++ b/src/bin/seeder/user_seeder.json @@ -1,11 +1,11 @@ [ { - "name": "Banuna", + "name": "banuna", "nomor": "6282340374412", - "masterUserRoleId": "1" + "masterUserRoleId": "3" }, { - "name": "Firman", + "name": "firman", "nomor": "6281339158911", "masterUserRoleId": "1" }