diff --git a/app/(application)/admin/_layout.tsx b/app/(application)/admin/_layout.tsx index b7cfcfe..bd4383c 100644 --- a/app/(application)/admin/_layout.tsx +++ b/app/(application)/admin/_layout.tsx @@ -1,27 +1,29 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { - ClickableCustom, + AlertDefaultSystem, DrawerCustom, + GridComponentView, + MenuDrawerDynamicGrid, StackCustom, TextCustom, } from "@/components"; import DrawerAdmin from "@/components/Drawer/DrawerAdmin"; import NavbarMenu from "@/components/Drawer/NavbarMenu"; -import SidebarMenu from "@/components/Drawer/SidebarMenu"; import { AccentColor, MainColor } from "@/constants/color-palet"; import { ICON_SIZE_SMALL } from "@/constants/constans-value"; +import { adminListMenu } from "@/screens/Admin/listPageAdmin"; import { GStyles } from "@/styles/global-styles"; import { FontAwesome6, Ionicons } from "@expo/vector-icons"; import { router, Stack } from "expo-router"; import { useState } from "react"; -import { View } from "react-native"; export default function AdminLayout() { - const [openDrawer, setOpenDrawer] = useState(false); + const [openDrawerNavbar, setOpenDrawerNavbar] = useState(false); + const [openDrawerUser, setOpenDrawerUser] = useState(false); return ( <> setOpenDrawer(true)} + onPress={() => setOpenDrawerNavbar(true)} /> ), headerRight: () => ( @@ -41,54 +43,185 @@ export default function AdminLayout() { name="circle-user" size={ICON_SIZE_SMALL} color={MainColor.white} + onPress={() => setOpenDrawerUser(true)} /> ), }} > - - - - - - - + + + + + + + + + + + + + + + - setOpenDrawer(false)}> - + setOpenDrawerNavbar(false)} + > + setOpenDrawer(false)} + onPress={() => setOpenDrawerNavbar(false)} style={{ alignSelf: "flex-end" }} /> setOpenDrawer(false)} + items={adminListMenu} + onClose={() => setOpenDrawerNavbar(false)} /> + + setOpenDrawerUser(false)} + height={"auto"} + > + + + } + > + Username + + + } + > + User Role + + + + ), + path: "/admin/notification", + }, + { + label: "Kembali ke User", + value: "back-to-user", + icon: ( + + ), + path: "" as any, + }, + { + label: "Keluar", + value: "logout", + icon: ( + + ), + path: "" as any, + color: MainColor.red, + }, + ]} + onPressItem={(item) => { + if (item.value === "notification") { + router.push("/admin/notification"); + setOpenDrawerUser(false); + } else if (item.value === "back-to-user") { + AlertDefaultSystem({ + title: "Kembali ke User", + message: "Apakah Anda yakin ingin kembali ke user?", + textLeft: "Batal", + textRight: "Ya", + onPressRight: () => { + router.replace(`/(application)/(user)/profile/${123}`); + }, + }); + } else if (item.value === "logout") { + AlertDefaultSystem({ + title: "Keluar", + message: "Apakah Anda yakin ingin keluar?", + textLeft: "Batal", + textRight: "Keluar", + onPressRight: () => { + router.replace("/"); + }, + }); + } + }} + /> + + ); } - diff --git a/app/(application)/admin/app-information/index.tsx b/app/(application)/admin/app-information/index.tsx new file mode 100644 index 0000000..213ad29 --- /dev/null +++ b/app/(application)/admin/app-information/index.tsx @@ -0,0 +1,62 @@ +import { + ScrollableCustom, + ViewWrapper +} from "@/components"; +import AdminAppInformation_BusinessFieldSection from "@/screens/Admin/App-Information/BusinessFieldSection"; +import AdminAppInformation_Bank from "@/screens/Admin/App-Information/InformationBankSection"; +import AdminAppInformation_StickerSection from "@/screens/Admin/App-Information/StickerSection"; +import { useState } from "react"; + +export default function AdminInformation() { + const [activeCategory, setActiveCategory] = useState("bank"); + + const handlePress = (item: any) => { + setActiveCategory(item.value); + // tambahkan logika lain seperti filter dsb. + }; + + const scrollComponent = ( + + ); + + const renderContent = () => { + switch (activeCategory) { + case "bank": + return ; + case "business": + return ; + case "sticker": + return ; + default: + return ; + } + }; + + return ( + <> + + {renderContent()} + + + ); +} diff --git a/app/(application)/admin/collaboration/group.tsx b/app/(application)/admin/collaboration/group.tsx new file mode 100644 index 0000000..f00a9bd --- /dev/null +++ b/app/(application)/admin/collaboration/group.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminCollaborationGroup() { + return ( + <> + + Admin Collaboration Group + + + ); +} diff --git a/app/(application)/admin/collaboration/index.tsx b/app/(application)/admin/collaboration/index.tsx new file mode 100644 index 0000000..5109ce6 --- /dev/null +++ b/app/(application)/admin/collaboration/index.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminCollaboration() { + return ( + <> + + Admin Collaboration + + + ); +} diff --git a/app/(application)/admin/collaboration/publish.tsx b/app/(application)/admin/collaboration/publish.tsx new file mode 100644 index 0000000..442e866 --- /dev/null +++ b/app/(application)/admin/collaboration/publish.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminCollaborationPublish() { + return ( + <> + + Admin Collaboration Publish + + + ); +} diff --git a/app/(application)/admin/collaboration/reject.tsx b/app/(application)/admin/collaboration/reject.tsx new file mode 100644 index 0000000..b351ed7 --- /dev/null +++ b/app/(application)/admin/collaboration/reject.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminCollaborationReject() { + return ( + <> + + Admin Collaboration Reject + + + ); +} diff --git a/app/(application)/admin/dashboard.tsx b/app/(application)/admin/dashboard.tsx index ceb6d04..4748f08 100644 --- a/app/(application)/admin/dashboard.tsx +++ b/app/(application)/admin/dashboard.tsx @@ -1,11 +1,40 @@ -import { TextCustom, ViewWrapper } from "@/components"; +import { + StackCustom, + TextCustom, + ViewWrapper +} from "@/components"; +import AdminComp_BoxDashboard from "@/components/_ShareComponent/Admin/BoxDashboard"; +import { MainColor } from "@/constants/color-palet"; +import { Ionicons } from "@expo/vector-icons"; export default function AdminDashboard() { return ( <> - Admin Dashboard + + + Main Dashboard + + {listData.map((item, i) => ( + + ))} + ); } + +const listData = [ + { + label: "User", + value: 4, + icon: , + }, + { + label: "Portofolio", + value: 7, + icon: ( + + ), + }, +]; diff --git a/app/(application)/admin/information.tsx b/app/(application)/admin/investment/index.tsx similarity index 58% rename from app/(application)/admin/information.tsx rename to app/(application)/admin/investment/index.tsx index d7831ef..876ce21 100644 --- a/app/(application)/admin/information.tsx +++ b/app/(application)/admin/investment/index.tsx @@ -1,10 +1,10 @@ import { TextCustom, ViewWrapper } from "@/components"; -export default function AdminInformation() { +export default function AdminInvestment() { return ( <> - Information + Admin Investment ); diff --git a/app/(application)/admin/investment/publish.tsx b/app/(application)/admin/investment/publish.tsx new file mode 100644 index 0000000..a194391 --- /dev/null +++ b/app/(application)/admin/investment/publish.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminInvestmentPublish() { + return ( + <> + + Admin Investment Publish + + + ); +} diff --git a/app/(application)/admin/investment/reject.tsx b/app/(application)/admin/investment/reject.tsx new file mode 100644 index 0000000..26292a7 --- /dev/null +++ b/app/(application)/admin/investment/reject.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminInvestmentReject() { + return ( + <> + + Admin Investment Reject + + + ); +} diff --git a/app/(application)/admin/investment/review.tsx b/app/(application)/admin/investment/review.tsx new file mode 100644 index 0000000..37e018e --- /dev/null +++ b/app/(application)/admin/investment/review.tsx @@ -0,0 +1,11 @@ +import { TextCustom, ViewWrapper } from "@/components"; + +export default function AdminInvestmentReview() { + return ( + <> + + Admin Investment Review + + + ); +} diff --git a/app/(application)/admin/maps.tsx b/app/(application)/admin/maps.tsx index c08541d..f27ac3d 100644 --- a/app/(application)/admin/maps.tsx +++ b/app/(application)/admin/maps.tsx @@ -1,10 +1,10 @@ -import { TextCustom, ViewWrapper } from "@/components"; +import { MapCustom, ViewWrapper } from "@/components"; export default function AdminMaps() { return ( <> - Maps + ); diff --git a/app/(application)/admin/notification/index.tsx b/app/(application)/admin/notification/index.tsx new file mode 100644 index 0000000..eef8cc0 --- /dev/null +++ b/app/(application)/admin/notification/index.tsx @@ -0,0 +1,20 @@ +import { BackButton, TextCustom, ViewWrapper } from "@/components"; +import { Stack } from "expo-router"; + +export default function AdminNotification() { + return ( + <> + , + headerRight: () => <>, + }} + /> + + + Notification + + + ); +} diff --git a/app/_layout.tsx b/app/_layout.tsx index 078d297..14240ab 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -14,7 +14,10 @@ export default function RootLayout() { headerTitleAlign: "center", }} > - + void; + value?: string | number + onChange?: (value: string | number) => void; + icon?: React.ReactNode; + style?: StyleProp } -const CircularInput: React.FC = ({ value, onChange }) => { +const CircularInput: React.FC = ({ value, onChange, icon, style }) => { return ( - - + + {icon ? ( + icon + ) : ( + + )} ); }; diff --git a/components/Divider/Divider.tsx b/components/Divider/Divider.tsx index 810ab6e..477d354 100644 --- a/components/Divider/Divider.tsx +++ b/components/Divider/Divider.tsx @@ -2,8 +2,8 @@ import { AccentColor } from "@/constants/color-palet"; import { View } from "react-native"; export default function Divider({ - color = AccentColor.blue, - size = 1, + color = AccentColor.white, + size = 0.5, marginTop= 12, marginBottom= 12, }: { diff --git a/components/Drawer/DrawerAdmin.tsx b/components/Drawer/DrawerAdmin.tsx index fc433d4..d29bba1 100644 --- a/components/Drawer/DrawerAdmin.tsx +++ b/components/Drawer/DrawerAdmin.tsx @@ -1,10 +1,10 @@ import React, { useEffect, useRef } from "react"; import { - Animated, - Dimensions, - InteractionManager, - PanResponder, - StyleSheet + Animated, + Dimensions, + InteractionManager, + PanResponder, + StyleSheet, } from "react-native"; import { AccentColor, MainColor } from "@/constants/color-palet"; @@ -107,9 +107,15 @@ export default function DrawerAdmin({ {...panResponder.panHandlers} > {/* Handle Bar (opsional) */} - {/* */} - - {children} + + {children} + {/* */} + ); diff --git a/components/Drawer/MenuDrawerDynamicGird.tsx b/components/Drawer/MenuDrawerDynamicGird.tsx index eba1007..5b4c8ac 100644 --- a/components/Drawer/MenuDrawerDynamicGird.tsx +++ b/components/Drawer/MenuDrawerDynamicGird.tsx @@ -7,6 +7,7 @@ import { Href } from "expo-router"; type IMenuDrawerItemProps = { icon: React.ReactNode; label: string; + value?: string; path?: Href; color?: string; } diff --git a/components/Drawer/NavbarMenu.tsx b/components/Drawer/NavbarMenu.tsx index a5fda5b..6416647 100644 --- a/components/Drawer/NavbarMenu.tsx +++ b/components/Drawer/NavbarMenu.tsx @@ -1,17 +1,17 @@ import { AccentColor, MainColor } from "@/constants/color-palet"; import { Ionicons } from "@expo/vector-icons"; import { router, usePathname } from "expo-router"; -import React, { useRef, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Animated, + ScrollView, StyleSheet, Text, TouchableOpacity, View, } from "react-native"; -import TextCustom from "../Text/TextCustom"; -interface NavbarItem { +export interface NavbarItem { label: string; icon?: keyof typeof Ionicons.glyphMap; color?: string; @@ -33,6 +33,17 @@ export default function NavbarMenu({ items, onClose }: NavbarMenuProps) { const [activeLink, setActiveLink] = useState(null); const [openKeys, setOpenKeys] = useState([]); // Untuk kontrol dropdown + // Normalisasi path: hapus trailing slash + const normalizePath = (path: string) => path.replace(/\/+$/, ""); + const normalizedPathname = pathname ? normalizePath(pathname) : ""; + + // Set activeLink saat pathname berubah + useEffect(() => { + if (normalizedPathname) { + setActiveLink(normalizedPathname); + } + }, [normalizedPathname]); + // Toggle dropdown const toggleOpen = (label: string) => { setOpenKeys((prev) => @@ -41,18 +52,31 @@ export default function NavbarMenu({ items, onClose }: NavbarMenuProps) { }; return ( - - {items.map((item) => ( - toggleOpen(item.label)} - /> - ))} + + + {items.map((item) => ( + toggleOpen(item.label)} + /> + ))} + ); } @@ -83,7 +107,7 @@ function MenuItem({ duration: 200, useNativeDriver: false, }).start(); - }, [isOpen, item.links]); + }, [isOpen, item.links, animatedHeight]); // Jika ada submenu if (item.links && item.links.length > 0) { @@ -93,7 +117,7 @@ function MenuItem({ @@ -135,7 +159,7 @@ function MenuItem({ }} > @@ -186,14 +210,14 @@ function MenuItem({ // Styles const styles = StyleSheet.create({ container: { - marginTop: 20, + marginBottom: 5, }, parentItem: { flexDirection: "row", alignItems: "center", paddingVertical: 12, paddingHorizontal: 10, - backgroundColor: AccentColor.darkblue, + // backgroundColor: AccentColor.darkblue, borderRadius: 8, marginBottom: 5, justifyContent: "space-between", @@ -210,7 +234,7 @@ const styles = StyleSheet.create({ alignItems: "center", paddingVertical: 12, paddingHorizontal: 10, - backgroundColor: AccentColor.darkblue, + // backgroundColor: AccentColor.darkblue, borderRadius: 8, marginBottom: 5, }, @@ -246,6 +270,7 @@ const styles = StyleSheet.create({ }, subText: { color: MainColor.white, - fontSize: 14, + fontSize: 16, + fontWeight: "500", }, }); diff --git a/components/Drawer/SidebarMenu.tsx b/components/Drawer/SidebarMenu.tsx index ce1d541..91a9896 100644 --- a/components/Drawer/SidebarMenu.tsx +++ b/components/Drawer/SidebarMenu.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useState, useEffect } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Animated, Dimensions, diff --git a/components/Text/TextCustom.tsx b/components/Text/TextCustom.tsx index c1ad0e7..49fbf3d 100644 --- a/components/Text/TextCustom.tsx +++ b/components/Text/TextCustom.tsx @@ -22,7 +22,7 @@ interface TextCustomProps { style?: StyleProp; bold?: boolean; semiBold?: boolean; - size?: "default" | "large" | "small" | "xlarge"; + size?: "default" | "large" | "small" | "xlarge" | number color?: "default" | "yellow" | "red" | "gray" | "green" | "black" align?: TextAlign; // Prop untuk alignment truncate?: boolean | number; @@ -54,6 +54,7 @@ const TextCustom: React.FC = ({ if (size === "large") selectedStyles.push(styles.large); else if (size === "xlarge") selectedStyles.push(styles.xlarge); else if (size === "small") selectedStyles.push(styles.small); + else if (typeof size === "number") selectedStyles.push({ fontSize: size }); // Color if (color === "yellow") selectedStyles.push(styles.yellow); @@ -105,7 +106,7 @@ export const styles = StyleSheet.create({ fontSize: TEXT_SIZE_MEDIUM, color: MainColor.white, fontFamily: "Poppins-Regular", - lineHeight: 20, + // lineHeight: 20, }, bold: { fontFamily: "Poppins-Bold", diff --git a/components/_ShareComponent/Admin/BoxDashboard.tsx b/components/_ShareComponent/Admin/BoxDashboard.tsx new file mode 100644 index 0000000..4c85dae --- /dev/null +++ b/components/_ShareComponent/Admin/BoxDashboard.tsx @@ -0,0 +1,46 @@ +import BaseBox from "@/components/Box/BaseBox"; +import CircleContainer from "@/components/Container/CircleContainer"; +import Grid from "@/components/Grid/GridCustom"; +import StackCustom from "@/components/Stack/StackCustom"; +import TextCustom from "@/components/Text/TextCustom"; +import { MainColor } from "@/constants/color-palet"; + +interface BoxDashboardProps { + item: { + label: string; + value: string | number; + icon: React.ReactNode; + }; +} + +export default function AdminComp_BoxDashboard({ item }: BoxDashboardProps) { + return ( + <> + + + + + {item.label} + {item.value} + + + + + + + + + ); +} diff --git a/components/_ShareComponent/Admin/BoxTitlePage.tsx b/components/_ShareComponent/Admin/BoxTitlePage.tsx new file mode 100644 index 0000000..1e97491 --- /dev/null +++ b/components/_ShareComponent/Admin/BoxTitlePage.tsx @@ -0,0 +1,16 @@ +import BaseBox from "@/components/Box/BaseBox"; +import TextCustom from "@/components/Text/TextCustom"; +import { TEXT_SIZE_LARGE } from "@/constants/constans-value"; + +export default function AdminComp_BoxTitle({ title , rightComponent}: { title: string , rightComponent?: React.ReactNode}) { + return ( + <> + + + {title} + + {rightComponent} + + + ); +} diff --git a/components/_ShareComponent/GridSectionView.tsx b/components/_ShareComponent/GridSectionView.tsx new file mode 100644 index 0000000..d7efda7 --- /dev/null +++ b/components/_ShareComponent/GridSectionView.tsx @@ -0,0 +1,25 @@ +import Grid from "../Grid/GridCustom"; + +export default function GridComponentView({ + leftIcon, + children, + rightIcon, +}: { + leftIcon?: React.ReactNode; + children: React.ReactNode; + rightIcon?: React.ReactNode; +}) { + return ( + + + {leftIcon} + + + {children} + + + {rightIcon} + + + ); +} diff --git a/components/index.ts b/components/index.ts index 207a212..beec144 100644 --- a/components/index.ts +++ b/components/index.ts @@ -55,6 +55,7 @@ import TabBarBackground from "./_ShareComponent/TabBarBackground"; import ViewWrapper from "./_ShareComponent/ViewWrapper"; import SearchInput from "./_ShareComponent/SearchInput"; import DummyLandscapeImage from "./_ShareComponent/DummyLandscapeImage"; +import GridComponentView from "./_ShareComponent/GridSectionView"; // Progress import ProgressCustom from "./Progress/ProgressCustom"; @@ -107,6 +108,7 @@ export { // ShareComponent SearchInput, DummyLandscapeImage, + GridComponentView, Spacing, // Stack StackCustom, diff --git a/screens/Admin/App-Information/BusinessFieldSection.tsx b/screens/Admin/App-Information/BusinessFieldSection.tsx new file mode 100644 index 0000000..949fec4 --- /dev/null +++ b/screens/Admin/App-Information/BusinessFieldSection.tsx @@ -0,0 +1,9 @@ +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; + +export default function AdminAppInformation_BusinessFieldSection() { + return ( + <> + + + ); +} diff --git a/screens/Admin/App-Information/InformationBankSection.tsx b/screens/Admin/App-Information/InformationBankSection.tsx new file mode 100644 index 0000000..eab8ea9 --- /dev/null +++ b/screens/Admin/App-Information/InformationBankSection.tsx @@ -0,0 +1,95 @@ +import { + BaseBox, + ButtonCustom, + Divider, + Grid, + TextCustom +} from "@/components"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import { MainColor } from "@/constants/color-palet"; +import { ICON_SIZE_SMALL } from "@/constants/constans-value"; +import { dummyMasterBank } from "@/lib/dummy-data/_master/bank"; +import { FontAwesome5, Ionicons } from "@expo/vector-icons"; +import { useState } from "react"; +import { TouchableOpacity, View } from "react-native"; +import { Switch } from "react-native-paper"; + +export default function AdminAppInformation_Bank() { + const [value, setValue] = useState(false); + return ( + <> + {}} + > + + + } + /> + + + + Aksi + + + Status + + + Nama Bank + + + + + + {dummyMasterBank.map((e, i) => ( + + + + + } + onPress={() => {}} + > + Edit + + + + { + setValue(!value); + }} + theme={{ + colors: { + primary: MainColor.yellow, + }, + }} + /> + + + {e.code} + + + + + ))} + + + ); +} diff --git a/screens/Admin/App-Information/StickerSection.tsx b/screens/Admin/App-Information/StickerSection.tsx new file mode 100644 index 0000000..d0709ce --- /dev/null +++ b/screens/Admin/App-Information/StickerSection.tsx @@ -0,0 +1,9 @@ +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; + +export default function AdminAppInformation_StickerSection() { + return ( + <> + + + ); +} diff --git a/screens/Admin/listPageAdmin.tsx b/screens/Admin/listPageAdmin.tsx new file mode 100644 index 0000000..e05ec4d --- /dev/null +++ b/screens/Admin/listPageAdmin.tsx @@ -0,0 +1,96 @@ +import { NavbarItem } from "@/components/Drawer/NavbarMenu"; + +export { adminListMenu } + +const adminListMenu: NavbarItem[] = [ + { + label: "Main Dashboard", + icon: "home", + link: "/admin/dashboard", + }, + { + label: "Investasi", + icon: "wallet", + links: [ + { label: "Dashboard", link: "/admin/investment" }, + { label: "Publish", link: "/admin/investment/publish" }, + { label: "Review", link: "/admin/investment/review" }, + { label: "Reject", link: "/admin/investment/reject" }, + ], + }, + { + label: "Donasi", + icon: "hand-right", + links: [ + { label: "Dashboard", link: "/admin/donasi" }, + { label: "Publish", link: "/admin/donasi/publish" }, + { label: "Review", link: "/admin/donasi/review" }, + { label: "Reject", link: "/admin/donasi/reject" }, + { label: "Kategori", link: "/admin/donasi/kategori" }, + ], + }, + { + label: "Event", + icon: "calendar-clear", + links: [ + { label: "Dashboard", link: "/admin/event" }, + { label: "Publish", link: "/admin/event/publish" }, + { label: "Review", link: "/admin/event/review" }, + { label: "Reject", link: "/admin/event/reject" }, + { label: "Tipe Acara", link: "/admin/event/tipe-acara" }, + { label: "Riwayat", link: "/admin/event/riwayat" }, + ], + }, + { + label: "Voting", + icon: "accessibility-outline", + links: [ + { label: "Dashboard", link: "/admin/voting" }, + { label: "Publish", link: "/admin/voting/publish" }, + { label: "Review", link: "/admin/voting/review" }, + { label: "Reject", link: "/admin/voting/reject" }, + { label: "Riwayat", link: "/admin/voting/riwayat" }, + ], + }, + { + label: "Job", + icon: "desktop-outline", + links: [ + { label: "Dashboard", link: "/admin/job" }, + { label: "Publish", link: "/admin/job/publish" }, + { label: "Review", link: "/admin/job/review" }, + { label: "Reject", link: "/admin/job/reject" }, + ], + }, + { + label: "Forum", + icon: "chatbubble-ellipses-outline", + links: [ + { label: "Dashboard", link: "/admin/forum" }, + { label: "Posting", link: "/admin/forum/publish" }, + { label: "Report Posting", link: "/admin/forum/review" }, + { label: "Report Comment", link: "/admin/forum/reject" }, + ], + }, + { + label: "Collaboration", + icon: "people", + links: [ + { label: "Dashboard", link: "/admin/collaboration" }, + { label: "Publish", link: "/admin/collaboration/publish" }, + { label: "Group", link: "/admin/collaboration/group" }, + { label: "Reject", link: "/admin/collaboration/reject" }, + ], + }, + { label: "Maps", icon: "map", link: "/admin/maps" }, + { + label: "App Information", + icon: "information-circle", + link: "/admin/app-information", + }, + { + label: "User Access", + icon: "people", + link: "/admin/user-access", + }, +]; \ No newline at end of file diff --git a/screens/Profile/ListPage.tsx b/screens/Profile/ListPage.tsx index ddfeee4..b830854 100644 --- a/screens/Profile/ListPage.tsx +++ b/screens/Profile/ListPage.tsx @@ -61,7 +61,7 @@ export const drawerItemsProfile = ({ /> ), label: "Dashboard Admin", - path: `/(application)/(admin)/dashboard`, + path: `/(application)/admin/dashboard`, }, { icon: (