diff --git a/bun.lock b/bun.lock
index d9dcee17..8f2fcf2f 100644
--- a/bun.lock
+++ b/bun.lock
@@ -19,7 +19,7 @@
"@mantine/tiptap": "^7.5.3",
"@prisma/client": "^6.3.0",
"@react-pdf/renderer": "^3.4.4",
- "@tabler/icons-react": "^2.38.0",
+ "@tabler/icons-react": "^3.31.0",
"@tiptap/extension-highlight": "^2.2.3",
"@tiptap/extension-link": "^2.2.3",
"@tiptap/extension-subscript": "^2.2.3",
@@ -919,9 +919,9 @@
"@swc/helpers": ["@swc/helpers@0.5.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw=="],
- "@tabler/icons": ["@tabler/icons@2.47.0", "", {}, "sha512-4w5evLh+7FUUiA1GucvGj2ReX2TvOjEr4ejXdwL/bsjoSkof6r1gQmzqI+VHrE2CpJpB3al7bCTulOkFa/RcyA=="],
+ "@tabler/icons": ["@tabler/icons@3.31.0", "", {}, "sha512-dblAdeKY3+GA1U+Q9eziZ0ooVlZMHsE8dqP0RkwvRtEsAULoKOYaCUOcJ4oW1DjWegdxk++UAt2SlQVnmeHv+g=="],
- "@tabler/icons-react": ["@tabler/icons-react@2.47.0", "", { "dependencies": { "@tabler/icons": "2.47.0", "prop-types": "^15.7.2" }, "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } }, "sha512-iqly2FvCF/qUbgmvS8E40rVeYY7laltc5GUjRxQj59DuX0x/6CpKHTXt86YlI2whg4czvd/c8Ce8YR08uEku0g=="],
+ "@tabler/icons-react": ["@tabler/icons-react@3.31.0", "", { "dependencies": { "@tabler/icons": "3.31.0" }, "peerDependencies": { "react": ">= 16" } }, "sha512-2rrCM5y/VnaVKnORpDdAua9SEGuJKVqPtWxeQ/vUVsgaUx30LDgBZph7/lterXxDY1IKR6NO//HDhWiifXTi3w=="],
"@tiptap/core": ["@tiptap/core@2.11.5", "", { "peerDependencies": { "@tiptap/pm": "^2.7.0" } }, "sha512-jb0KTdUJaJY53JaN7ooY3XAxHQNoMYti/H6ANo707PsLXVeEqJ9o8+eBup1JU5CuwzrgnDc2dECt2WIGX9f8Jw=="],
diff --git a/package.json b/package.json
index 565a3b91..3ff55e76 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"@mantine/tiptap": "^7.5.3",
"@prisma/client": "^6.3.0",
"@react-pdf/renderer": "^3.4.4",
- "@tabler/icons-react": "^2.38.0",
+ "@tabler/icons-react": "^3.31.0",
"@tiptap/extension-highlight": "^2.2.3",
"@tiptap/extension-link": "^2.2.3",
"@tiptap/extension-subscript": "^2.2.3",
diff --git a/run.env.start.dev b/run.env.start.dev
index 0ca14666..9dacda79 100644
--- a/run.env.start.dev
+++ b/run.env.start.dev
@@ -1 +1 @@
-bun --env-file=.env run --bun start -p 3005
\ No newline at end of file
+bun --env-file=.env run --bun start -p 3000
\ No newline at end of file
diff --git a/src/app/api/validation/route.ts b/src/app/api/validation/route.ts
index ac7000f8..5b1b20b0 100644
--- a/src/app/api/validation/route.ts
+++ b/src/app/api/validation/route.ts
@@ -2,7 +2,6 @@ import { NextResponse } from "next/server";
export async function GET(req: Request) {
const token = req.headers.get("Authorization")?.split(" ")[1];
- console.log("Token received in API Validation:", token, `<<<<<<<<<<<<<<<`);
if (!token) return NextResponse.json({ success: false }, { status: 401 });
diff --git a/src/app/dev/admin/layout.tsx b/src/app/dev/admin/layout.tsx
index b267ac9e..d3654286 100644
--- a/src/app/dev/admin/layout.tsx
+++ b/src/app/dev/admin/layout.tsx
@@ -6,6 +6,7 @@ import adminNotifikasi_getByUserId from "@/app_modules/admin/notifikasi/fun/get/
import React from "react";
import versionUpdate from "../../../../package.json";
import { redirect } from "next/navigation";
+import { Admin_V3_MainLayout } from "@/app_modules/admin/_components_v3/main_layout";
export default async function Layout({
children,
@@ -15,24 +16,33 @@ export default async function Layout({
const userLoginId = await funGetUserIdByToken();
const version = versionUpdate.version;
- const dataUser = await funGlobal_getUserById({
- userId: userLoginId as string,
- });
- const listNotifikasi = await adminNotifikasi_getByUserId({ page: 1 });
- const countNotifikasi = await adminNotifikasi_countNotifikasi();
-
- if (dataUser?.masterUserRoleId == "1") return redirect("/dev/home");
+ // const listNotifikasi = await adminNotifikasi_getByUserId({ page: 1 });
+ // const countNotifikasi = await adminNotifikasi_countNotifikasi();
+
+ // const dataUser = await funGlobal_getUserById({
+ // userId: userLoginId as string,
+ // });
+ // if (dataUser?.masterUserRoleId == "1") return redirect("/dev/home");
return (
<>
-
{children}
-
+ */}
+
+
+ {children}
+
>
);
}
diff --git a/src/app/dev/admin/main/dashboard/page.tsx b/src/app/dev/admin/main/dashboard/page.tsx
index 51820acf..d7f84c83 100644
--- a/src/app/dev/admin/main/dashboard/page.tsx
+++ b/src/app/dev/admin/main/dashboard/page.tsx
@@ -1,11 +1,6 @@
import { AdminMain } from "@/app_modules/admin/main_dashboard";
-import { AdminMainDashboard_CountPOrtofolio } from "@/app_modules/admin/main_dashboard/fun/count/fun_count_portofolio";
-import { AdminMainDashboard_CountUser } from "@/app_modules/admin/main_dashboard/fun/count/fun_count_user";
export default async function Page() {
- // const countUser = await AdminMainDashboard_CountUser();
- // const countPorto = await AdminMainDashboard_CountPOrtofolio();
-
// await new Promise((a, b) => {
// setTimeout(a, 4000);
// });
diff --git a/src/app_modules/admin/_admin_global/_component/comp_admin_modal.tsx b/src/app_modules/admin/_admin_global/_component/comp_admin_modal.tsx
index e7f626f7..53025c56 100644
--- a/src/app_modules/admin/_admin_global/_component/comp_admin_modal.tsx
+++ b/src/app_modules/admin/_admin_global/_component/comp_admin_modal.tsx
@@ -1,6 +1,5 @@
import { AdminColor } from "@/app_modules/_global/color/color_pallet";
import { Modal } from "@mantine/core";
-import { reject } from "lodash";
export function Admin_ComponentModal({
children,
@@ -15,7 +14,7 @@ export function Admin_ComponentModal({
opened: boolean;
onClose: () => void;
size?: "sm" | "md" | "lg" | "xl";
- title: any;
+ title?: any;
withCloseButton?: boolean | undefined;
closeOnClickOutside?: boolean | undefined;
}) {
diff --git a/src/app_modules/admin/_admin_global/_component/comp_button_user_on_navbar.tsx b/src/app_modules/admin/_admin_global/_component/comp_button_user_on_navbar.tsx
index 8fb64a80..0f8e5a2f 100644
--- a/src/app_modules/admin/_admin_global/_component/comp_button_user_on_navbar.tsx
+++ b/src/app_modules/admin/_admin_global/_component/comp_button_user_on_navbar.tsx
@@ -37,7 +37,7 @@ export function Admin_ComponentButtonUserCircle({
async function onClickLogout() {
setLoadingLogout(true);
- const res = await fetch(`/api/auth/logout?id=${dataUser.id}`, {
+ const res = await fetch(`/api/auth/logout?id=${dataUser?.id}`, {
method: "GET",
});
@@ -69,7 +69,7 @@ export function Admin_ComponentButtonUserCircle({
- {dataUser.username}
+ {dataUser?.username}
@@ -78,7 +78,7 @@ export function Admin_ComponentButtonUserCircle({
- +{dataUser.nomor}
+ +{dataUser?.nomor}
@@ -208,7 +208,7 @@ export function Admin_ComponentButtonUserCircle({
- {dataUser.username}
+ {dataUser?.username}
@@ -218,7 +218,7 @@ export function Admin_ComponentButtonUserCircle({
- +{dataUser.nomor}
+ +{dataUser?.nomor}
diff --git a/src/app_modules/admin/_admin_global/_ui/ui_navbar_admin.tsx b/src/app_modules/admin/_admin_global/_ui/ui_navbar_admin.tsx
index d71b65f8..9669cd7c 100644
--- a/src/app_modules/admin/_admin_global/_ui/ui_navbar_admin.tsx
+++ b/src/app_modules/admin/_admin_global/_ui/ui_navbar_admin.tsx
@@ -14,7 +14,7 @@ export default function Admin_UiNavbar({
setActiveId,
setActiveChildId,
}: {
- userRoleId: string;
+ userRoleId: string | null;
activeId: string;
activeChildId: string;
setActiveId: (val: any) => void;
@@ -199,5 +199,5 @@ export default function Admin_UiNavbar({
));
- return userRoleId == "2" ? adminNavbar : developerNavbar;
+ return userRoleId == "3" ? developerNavbar : adminNavbar;
}
diff --git a/src/app_modules/admin/_admin_global/header_tamplate.tsx b/src/app_modules/admin/_admin_global/header_tamplate.tsx
index c6ea426a..97039054 100644
--- a/src/app_modules/admin/_admin_global/header_tamplate.tsx
+++ b/src/app_modules/admin/_admin_global/header_tamplate.tsx
@@ -1,13 +1,13 @@
"use client";
import { AdminColor } from "@/app_modules/_global/color/color_pallet";
-import { Divider, Stack, Title } from "@mantine/core";
+import { Stack, Title } from "@mantine/core";
export default function ComponentAdminGlobal_HeaderTamplate({name}: {name: string}) {
return (
<>
- {name ? name : null}
+ {name ? name : null}
>
);
diff --git a/src/app_modules/admin/_components_v3/comp_button_user_circle.tsx b/src/app_modules/admin/_components_v3/comp_button_user_circle.tsx
new file mode 100644
index 00000000..e18bebaf
--- /dev/null
+++ b/src/app_modules/admin/_components_v3/comp_button_user_circle.tsx
@@ -0,0 +1,257 @@
+"use client";
+
+import { AccentColor } from "@/app_modules/_global/color";
+import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global";
+import { MODEL_USER } from "@/app_modules/home/model/interface";
+import { Warna } from "@/lib/warna";
+import {
+ ActionIcon,
+ Button,
+ Center,
+ Divider,
+ Group,
+ Popover,
+ SimpleGrid,
+ Stack,
+ Text,
+ Title
+} from "@mantine/core";
+import {
+ IconBell,
+ IconHierarchy2,
+ IconLogout,
+ IconReplaceUser,
+ IconUser,
+ IconUserCircle
+} from "@tabler/icons-react";
+import { useRouter } from "next/navigation";
+import { useState } from "react";
+import { Admin_ComponentModal } from "../_admin_global/_component/comp_admin_modal";
+
+export function Admin_V3_ComponentButtonUserCircle({
+ dataUser,
+}: {
+ dataUser: MODEL_USER | null;
+}) {
+ const router = useRouter();
+ const [isOpenMenuUser, setOpenMenuUser] = useState(false);
+ const [openPop, setOpenPop] = useState(false);
+ const [openModalLogout, setOpenModalLogout] = useState(false);
+ const [openModalReplaceUser, setOpenModalReplaceUser] = useState(false);
+ const [loadingLogout, setLoadingLogout] = useState(false);
+ const [loadingReplaceUser, setLoadingReplaceUser] = useState(false);
+
+ const listMenu = [
+ {
+ icon: IconUser,
+ label: dataUser?.username,
+ },
+ {
+ icon: IconHierarchy2,
+ label:
+ dataUser?.masterUserRoleId == "2"
+ ? "Admin "
+ : dataUser?.masterUserRoleId == "3"
+ ? "Super Admin"
+ : "",
+ },
+ ];
+
+ const listAction = [
+ {
+ icon: IconBell,
+ label: "Notifikasi",
+ color: "",
+ onClick: () => console.log("Notifikasi"),
+ },
+ {
+ icon: IconReplaceUser,
+ label: "Tampilan user",
+ color: "",
+ onClick: () => setOpenModalReplaceUser(true),
+ },
+ {
+ icon: IconLogout,
+ label: "Logout",
+ color: "red",
+ onClick: () => setOpenModalLogout(true),
+ },
+ ];
+
+ async function onClickLogout() {
+ setLoadingLogout(true);
+ const res = await fetch(`/api/auth/logout?id=${dataUser?.id}`, {
+ method: "GET",
+ });
+
+ const result = await res.json();
+ if (res.status === 200) {
+ ComponentGlobal_NotifikasiBerhasil(result.message);
+ router.push("/", { scroll: false });
+ }
+ }
+
+ return (
+ <>
+
+
+ {
+ setOpenPop((o) => !o);
+ }}
+ >
+
+
+
+
+
+
+ {listMenu.map((e, i) => (
+
+
+ {e.label}
+
+ ))}
+
+
+
+
+ {listAction.map((e, i) => (
+
+
+
+
+
+ ))}
+
+
+ {/*
+
+
+ */}
+
+
+
+
+ {/* setOpenModal(false)}
+ centered
+ withCloseButton={false}
+ closeOnClickOutside={false}
+ >
+
+ Anda yakin ingin keluar ?
+
+
+
+
+
+ */}
+
+ setOpenModalLogout(false)}
+ withCloseButton={false}
+ closeOnClickOutside={false}
+ >
+
+
+ Anda yakin ingin keluar ?
+
+
+
+
+
+
+
+
+ setOpenModalReplaceUser(false)}
+ withCloseButton={false}
+ closeOnClickOutside={false}
+ >
+
+
+ Anda yakin ingin keluar ?
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/admin/_components_v3/main_layout.tsx b/src/app_modules/admin/_components_v3/main_layout.tsx
new file mode 100644
index 00000000..c1d5c244
--- /dev/null
+++ b/src/app_modules/admin/_components_v3/main_layout.tsx
@@ -0,0 +1,213 @@
+"use client";
+
+import { AccentColor, MainColor } from "@/app_modules/_global/color";
+import { apiGetUserById } from "@/app_modules/_global/lib/api_user";
+import { MODEL_USER } from "@/app_modules/home/model/interface";
+import { MODEL_NOTIFIKASI } from "@/app_modules/notifikasi/model/interface";
+import { gs_admin_ntf } from "@/lib/global_state";
+import {
+ AppShell,
+ Burger,
+ Divider,
+ Group,
+ Header,
+ MediaQuery,
+ Navbar,
+ ScrollArea,
+ Stack,
+ Text,
+ useMantineTheme
+} from "@mantine/core";
+import { useDisclosure, useShallowEffect } from "@mantine/hooks";
+import {
+ IconBriefcase,
+ IconCoin,
+ IconHome,
+ IconMessage,
+ IconUser
+} from "@tabler/icons-react";
+import { useAtom } from "jotai";
+import { usePathname, useRouter } from "next/navigation";
+import type React from "react";
+import { useState } from "react";
+import {
+ Admin_UiNavbar
+} from "../_admin_global";
+import {
+ gs_admin_navbar_menu,
+ gs_admin_navbar_subMenu,
+} from "../_admin_global/new_global_state";
+import { Admin_V3_ComponentButtonUserCircle } from "./comp_button_user_circle";
+
+export function Admin_V3_MainLayout({
+ children,
+ userLoginId,
+ countNotifikasi,
+ listNotifikasi,
+ version,
+}: {
+ children: React.ReactNode;
+ userLoginId: string;
+ countNotifikasi: number;
+ listNotifikasi: MODEL_NOTIFIKASI[];
+ version: string;
+}) {
+ const router = useRouter();
+ const [dataUser, setDataUser] = useState(null);
+ const userRoleId = dataUser?.masterUserRoleId;
+ const [activeId, setActiveId] = useAtom(gs_admin_navbar_menu);
+ const [activeChildId, setActiveChildId] = useAtom(gs_admin_navbar_subMenu);
+ const [dataNotifikasi, setDataNotifikasi] =
+ useState(listNotifikasi);
+
+ // Notifikasi
+ const [isDrawerNotifikasi, setDrawerNotifikasi] = useState(false);
+ const [countNtf, setCountNtf] = useState(countNotifikasi);
+ const [newAdminNtf, setNewAdminNtf] = useAtom(gs_admin_ntf);
+
+ useShallowEffect(() => {
+ handleLoadUser();
+ }, []);
+
+ async function handleLoadUser() {
+ try {
+ const response = await apiGetUserById({ id: userLoginId });
+ if (response && response.success) {
+ setDataUser(response.data);
+ } else {
+ console.error("Failed to fetch user data", response);
+ setDataUser(null);
+ }
+ } catch (error) {
+ console.error("Error fetching user data", error);
+ }
+ }
+
+ const [opened, { toggle, close }] = useDisclosure(false);
+
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ V {version}
+
+
+
+
+
+ {/*
+
+ {navLinks.map((link) => (
+ {
+ // if (
+ // typeof window !== "undefined" &&
+ // window.innerWidth < theme.breakpoints.md
+ // ) {
+ // close();
+ // }
+ // }}
+ >
+
+
+ {link.label}
+
+
+ ))}
+
+ */}
+
+ {/*
+
+
+
+
+
+
+
+
+
+
+
+
+ */}
+
+ }
+ header={
+
+
+
+
+
+
+
+ HIMPI DASHBOARD
+
+
+
+
+
+ }
+ >
+ {children}
+
+ );
+}
diff --git a/src/app_modules/admin/main_dashboard/main/view.tsx b/src/app_modules/admin/main_dashboard/main/view.tsx
index 8acc4b4c..f16fdfe7 100644
--- a/src/app_modules/admin/main_dashboard/main/view.tsx
+++ b/src/app_modules/admin/main_dashboard/main/view.tsx
@@ -16,10 +16,10 @@ export default function AdminMain() {
const [countUser, setCountUser] = useState(null);
const [countPortofolio, setCountPortofolio] = useState(null);
- useShallowEffect(() => {
- onLoadDataUser();
- onLoadDataPortofolio();
- }, []);
+ // useShallowEffect(() => {
+ // onLoadDataUser();
+ // onLoadDataPortofolio();
+ // }, []);
async function onLoadDataUser() {
try {
diff --git a/src/app_modules/admin/splash/splash.tsx b/src/app_modules/admin/splash/splash.tsx
index 5e8fd71b..8103ded7 100644
--- a/src/app_modules/admin/splash/splash.tsx
+++ b/src/app_modules/admin/splash/splash.tsx
@@ -11,6 +11,7 @@ import {
gs_admin_navbar_subMenu,
} from "../_admin_global/new_global_state";
import { IAdmin_ActivePage } from "../notifikasi/route_setting/type_of_select_page";
+import { AccentColor } from "@/app_modules/_global/color";
export default function SplashDashboardAdmin() {
const router = useRouter();
@@ -28,7 +29,7 @@ export default function SplashDashboardAdmin() {
<>
- Welcome Admin
+ Welcome Admin