Admin
Add: - screens/Admin/ - admin/notification/ Component Add: - components/_ShareComponent/GridSectionView.tsx ### No Issue
This commit is contained in:
@@ -1,15 +1,24 @@
|
|||||||
import { StackCustom } from "@/components";
|
import {
|
||||||
|
AlertDefaultSystem,
|
||||||
|
DrawerCustom,
|
||||||
|
GridComponentView,
|
||||||
|
MenuDrawerDynamicGrid,
|
||||||
|
StackCustom,
|
||||||
|
TextCustom,
|
||||||
|
} from "@/components";
|
||||||
import DrawerAdmin from "@/components/Drawer/DrawerAdmin";
|
import DrawerAdmin from "@/components/Drawer/DrawerAdmin";
|
||||||
import NavbarMenu, { NavbarItem } from "@/components/Drawer/NavbarMenu";
|
import NavbarMenu from "@/components/Drawer/NavbarMenu";
|
||||||
import { AccentColor, MainColor } from "@/constants/color-palet";
|
import { AccentColor, MainColor } from "@/constants/color-palet";
|
||||||
import { ICON_SIZE_SMALL } from "@/constants/constans-value";
|
import { ICON_SIZE_SMALL } from "@/constants/constans-value";
|
||||||
|
import { adminListMenu } from "@/screens/Admin/listPageAdmin";
|
||||||
import { GStyles } from "@/styles/global-styles";
|
import { GStyles } from "@/styles/global-styles";
|
||||||
import { FontAwesome6, Ionicons } from "@expo/vector-icons";
|
import { FontAwesome6, Ionicons } from "@expo/vector-icons";
|
||||||
import { Stack } from "expo-router";
|
import { router, Stack } from "expo-router";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function AdminLayout() {
|
export default function AdminLayout() {
|
||||||
const [openDrawer, setOpenDrawer] = useState(false);
|
const [openDrawerNavbar, setOpenDrawerNavbar] = useState(false);
|
||||||
|
const [openDrawerUser, setOpenDrawerUser] = useState(false);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack
|
<Stack
|
||||||
@@ -25,7 +34,7 @@ export default function AdminLayout() {
|
|||||||
name="menu"
|
name="menu"
|
||||||
size={ICON_SIZE_SMALL}
|
size={ICON_SIZE_SMALL}
|
||||||
color={MainColor.white}
|
color={MainColor.white}
|
||||||
onPress={() => setOpenDrawer(true)}
|
onPress={() => setOpenDrawerNavbar(true)}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
headerRight: () => (
|
headerRight: () => (
|
||||||
@@ -33,15 +42,28 @@ export default function AdminLayout() {
|
|||||||
name="circle-user"
|
name="circle-user"
|
||||||
size={ICON_SIZE_SMALL}
|
size={ICON_SIZE_SMALL}
|
||||||
color={MainColor.white}
|
color={MainColor.white}
|
||||||
|
onPress={() => setOpenDrawerUser(true)}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Stack.Screen name="dashboard" options={{ title: "Main Dashboard" }} />
|
<Stack.Screen name="dashboard" options={{ title: "Main Dashboard" }} />
|
||||||
<Stack.Screen name="investment/index" options={{ title: "Dashboard Investasi" }} />
|
<Stack.Screen
|
||||||
<Stack.Screen name="investment/publish" options={{ title: "Investasi Publish" }} />
|
name="investment/index"
|
||||||
<Stack.Screen name="investment/review" options={{ title: "Investasi Review" }} />
|
options={{ title: "Dashboard Investasi" }}
|
||||||
<Stack.Screen name="investment/reject" options={{ title: "Investasi Reject" }} />
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="investment/publish"
|
||||||
|
options={{ title: "Investasi Publish" }}
|
||||||
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="investment/review"
|
||||||
|
options={{ title: "Investasi Review" }}
|
||||||
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="investment/reject"
|
||||||
|
options={{ title: "Investasi Reject" }}
|
||||||
|
/>
|
||||||
<Stack.Screen name="maps" options={{ title: "Maps" }} />
|
<Stack.Screen name="maps" options={{ title: "Maps" }} />
|
||||||
<Stack.Screen name="information" options={{ title: "Information" }} />
|
<Stack.Screen name="information" options={{ title: "Information" }} />
|
||||||
<Stack.Screen name="job/index" options={{ title: "Dashboard Job" }} />
|
<Stack.Screen name="job/index" options={{ title: "Dashboard Job" }} />
|
||||||
@@ -66,112 +88,125 @@ export default function AdminLayout() {
|
|||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
<DrawerAdmin isVisible={openDrawer} onClose={() => setOpenDrawer(false)}>
|
<DrawerAdmin
|
||||||
|
isVisible={openDrawerNavbar}
|
||||||
|
onClose={() => setOpenDrawerNavbar(false)}
|
||||||
|
>
|
||||||
<StackCustom gap={"xs"}>
|
<StackCustom gap={"xs"}>
|
||||||
<Ionicons
|
<Ionicons
|
||||||
name="close"
|
name="close"
|
||||||
size={ICON_SIZE_SMALL}
|
size={ICON_SIZE_SMALL}
|
||||||
color={MainColor.white}
|
color={MainColor.white}
|
||||||
onPress={() => setOpenDrawer(false)}
|
onPress={() => setOpenDrawerNavbar(false)}
|
||||||
style={{ alignSelf: "flex-end" }}
|
style={{ alignSelf: "flex-end" }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<NavbarMenu items={listItem} onClose={() => setOpenDrawer(false)} />
|
<NavbarMenu
|
||||||
|
items={adminListMenu}
|
||||||
|
onClose={() => setOpenDrawerNavbar(false)}
|
||||||
|
/>
|
||||||
</StackCustom>
|
</StackCustom>
|
||||||
</DrawerAdmin>
|
</DrawerAdmin>
|
||||||
|
|
||||||
|
<DrawerCustom
|
||||||
|
isVisible={openDrawerUser}
|
||||||
|
closeDrawer={() => setOpenDrawerUser(false)}
|
||||||
|
height={"auto"}
|
||||||
|
>
|
||||||
|
<StackCustom>
|
||||||
|
<GridComponentView
|
||||||
|
leftIcon={
|
||||||
|
<Ionicons
|
||||||
|
name="person"
|
||||||
|
size={ICON_SIZE_SMALL}
|
||||||
|
color={MainColor.white}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<TextCustom>Username</TextCustom>
|
||||||
|
</GridComponentView>
|
||||||
|
<GridComponentView
|
||||||
|
leftIcon={
|
||||||
|
<Ionicons
|
||||||
|
name="ribbon-outline"
|
||||||
|
size={ICON_SIZE_SMALL}
|
||||||
|
color={MainColor.white}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<TextCustom>User Role</TextCustom>
|
||||||
|
</GridComponentView>
|
||||||
|
|
||||||
|
<MenuDrawerDynamicGrid
|
||||||
|
columns={3}
|
||||||
|
data={[
|
||||||
|
{
|
||||||
|
label: "Notifikasi",
|
||||||
|
value: "notification",
|
||||||
|
icon: (
|
||||||
|
<Ionicons
|
||||||
|
name="notifications"
|
||||||
|
size={ICON_SIZE_SMALL}
|
||||||
|
color={MainColor.white}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
path: "/admin/notification",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Kembali ke User",
|
||||||
|
value: "back-to-user",
|
||||||
|
icon: (
|
||||||
|
<Ionicons
|
||||||
|
name="git-compare"
|
||||||
|
size={ICON_SIZE_SMALL}
|
||||||
|
color={MainColor.white}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
path: "" as any,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Keluar",
|
||||||
|
value: "logout",
|
||||||
|
icon: (
|
||||||
|
<Ionicons
|
||||||
|
name="log-out"
|
||||||
|
size={ICON_SIZE_SMALL}
|
||||||
|
color={MainColor.white}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
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("/");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</StackCustom>
|
||||||
|
</DrawerCustom>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const listItem: 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/information",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "User Access",
|
|
||||||
icon: "people",
|
|
||||||
link: "/admin/user-access",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|||||||
20
app/(application)/admin/notification/index.tsx
Normal file
20
app/(application)/admin/notification/index.tsx
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { BackButton, TextCustom, ViewWrapper } from "@/components";
|
||||||
|
import { Stack } from "expo-router";
|
||||||
|
|
||||||
|
export default function AdminNotification() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Stack.Screen
|
||||||
|
options={{
|
||||||
|
title: "Admin Notifikasi",
|
||||||
|
headerLeft: () => <BackButton />,
|
||||||
|
headerRight: () => <></>,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ViewWrapper>
|
||||||
|
<TextCustom>Notification</TextCustom>
|
||||||
|
</ViewWrapper>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -14,7 +14,10 @@ export default function RootLayout() {
|
|||||||
headerTitleAlign: "center",
|
headerTitleAlign: "center",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Stack.Screen name="index" options={{ title: "" }} />
|
<Stack.Screen
|
||||||
|
name="index"
|
||||||
|
options={{ title: "", headerBackVisible: false }}
|
||||||
|
/>
|
||||||
<Stack.Screen name="+not-found" options={{ title: "" }} />
|
<Stack.Screen name="+not-found" options={{ title: "" }} />
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="verification"
|
name="verification"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { Href } from "expo-router";
|
|||||||
type IMenuDrawerItemProps = {
|
type IMenuDrawerItemProps = {
|
||||||
icon: React.ReactNode;
|
icon: React.ReactNode;
|
||||||
label: string;
|
label: string;
|
||||||
|
value?: string;
|
||||||
path?: Href;
|
path?: Href;
|
||||||
color?: string;
|
color?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,34 +51,34 @@ export default function NavbarMenu({ items, onClose }: NavbarMenuProps) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
// flex: 1,
|
// flex: 1,
|
||||||
// backgroundColor: MainColor.black,
|
// backgroundColor: MainColor.black,
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ScrollView
|
<ScrollView
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingVertical: 10, // Opsional: tambahkan padding
|
paddingVertical: 10, // Opsional: tambahkan padding
|
||||||
}}
|
}}
|
||||||
// showsVerticalScrollIndicator={false} // Opsional: sembunyikan indikator scroll
|
// showsVerticalScrollIndicator={false} // Opsional: sembunyikan indikator scroll
|
||||||
>
|
>
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
key={item.label}
|
key={item.label}
|
||||||
item={item}
|
item={item}
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
activeLink={activeLink}
|
activeLink={activeLink}
|
||||||
setActiveLink={setActiveLink}
|
setActiveLink={setActiveLink}
|
||||||
isOpen={openKeys.includes(item.label)}
|
isOpen={openKeys.includes(item.label)}
|
||||||
toggleOpen={() => toggleOpen(item.label)}
|
toggleOpen={() => toggleOpen(item.label)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Komponen Item Menu
|
// Komponen Item Menu
|
||||||
|
|||||||
25
components/_ShareComponent/GridSectionView.tsx
Normal file
25
components/_ShareComponent/GridSectionView.tsx
Normal file
@@ -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 (
|
||||||
|
<Grid containerStyle={{ marginBottom: 0 }}>
|
||||||
|
<Grid.Col span={1} style={{ justifyContent: "center" }}>
|
||||||
|
{leftIcon}
|
||||||
|
</Grid.Col>
|
||||||
|
<Grid.Col span={10} style={{ justifyContent: "center" }}>
|
||||||
|
{children}
|
||||||
|
</Grid.Col>
|
||||||
|
<Grid.Col span={1} style={{ justifyContent: "center" }}>
|
||||||
|
{rightIcon}
|
||||||
|
</Grid.Col>
|
||||||
|
</Grid>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -55,6 +55,7 @@ import TabBarBackground from "./_ShareComponent/TabBarBackground";
|
|||||||
import ViewWrapper from "./_ShareComponent/ViewWrapper";
|
import ViewWrapper from "./_ShareComponent/ViewWrapper";
|
||||||
import SearchInput from "./_ShareComponent/SearchInput";
|
import SearchInput from "./_ShareComponent/SearchInput";
|
||||||
import DummyLandscapeImage from "./_ShareComponent/DummyLandscapeImage";
|
import DummyLandscapeImage from "./_ShareComponent/DummyLandscapeImage";
|
||||||
|
import GridComponentView from "./_ShareComponent/GridSectionView";
|
||||||
// Progress
|
// Progress
|
||||||
import ProgressCustom from "./Progress/ProgressCustom";
|
import ProgressCustom from "./Progress/ProgressCustom";
|
||||||
|
|
||||||
@@ -107,6 +108,7 @@ export {
|
|||||||
// ShareComponent
|
// ShareComponent
|
||||||
SearchInput,
|
SearchInput,
|
||||||
DummyLandscapeImage,
|
DummyLandscapeImage,
|
||||||
|
GridComponentView,
|
||||||
Spacing,
|
Spacing,
|
||||||
// Stack
|
// Stack
|
||||||
StackCustom,
|
StackCustom,
|
||||||
|
|||||||
96
screens/Admin/listPageAdmin.tsx
Normal file
96
screens/Admin/listPageAdmin.tsx
Normal file
@@ -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/information",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "User Access",
|
||||||
|
icon: "people",
|
||||||
|
link: "/admin/user-access",
|
||||||
|
},
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user