Refactor New Ui Bumdes 02
This commit is contained in:
@@ -9,11 +9,18 @@ import {
|
|||||||
Title,
|
Title,
|
||||||
useMantineColorScheme,
|
useMantineColorScheme,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconUserShield } from "@tabler/icons-react";
|
import {
|
||||||
|
IconLayoutSidebarLeftCollapse,
|
||||||
|
IconUserShield,
|
||||||
|
} from "@tabler/icons-react";
|
||||||
import { useLocation, useNavigate } from "@tanstack/react-router";
|
import { useLocation, useNavigate } from "@tanstack/react-router";
|
||||||
import { Bell, Moon, Sun, User as UserIcon } from "lucide-react"; // Renamed User to UserIcon to avoid conflict with Mantine's User component if it exists
|
import { Bell, Moon, Sun, User as UserIcon } from "lucide-react";
|
||||||
|
|
||||||
export function Header() {
|
interface HeaderProps {
|
||||||
|
onSidebarToggle?: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function Header({ onSidebarToggle }: HeaderProps) {
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const { colorScheme, toggleColorScheme } = useMantineColorScheme();
|
const { colorScheme, toggleColorScheme } = useMantineColorScheme();
|
||||||
const dark = colorScheme === "dark";
|
const dark = colorScheme === "dark";
|
||||||
@@ -56,9 +63,24 @@ export function Header() {
|
|||||||
return (
|
return (
|
||||||
<Group justify="space-between" w="100%">
|
<Group justify="space-between" w="100%">
|
||||||
{/* Title */}
|
{/* Title */}
|
||||||
<Title order={3} c={"white"}>
|
<Group gap="md">
|
||||||
{getPageTitle()}
|
<ActionIcon
|
||||||
</Title>
|
onClick={onSidebarToggle}
|
||||||
|
variant="subtle"
|
||||||
|
size="lg"
|
||||||
|
radius="xl"
|
||||||
|
visibleFrom="sm"
|
||||||
|
aria-label="Toggle sidebar"
|
||||||
|
>
|
||||||
|
<IconLayoutSidebarLeftCollapse
|
||||||
|
color="white"
|
||||||
|
style={{ width: "70%", height: "70%" }}
|
||||||
|
/>
|
||||||
|
</ActionIcon>
|
||||||
|
{/* <Title order={3} c={"white"}>
|
||||||
|
{getPageTitle()}
|
||||||
|
</Title> */}
|
||||||
|
</Group>
|
||||||
|
|
||||||
{/* Right Section */}
|
{/* Right Section */}
|
||||||
<Group gap="md">
|
<Group gap="md">
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
import {
|
import {
|
||||||
Badge,
|
Avatar,
|
||||||
Card,
|
Card,
|
||||||
Grid,
|
Grid,
|
||||||
GridCol,
|
GridCol,
|
||||||
Group,
|
Group,
|
||||||
Stack,
|
Stack,
|
||||||
Text,
|
Text,
|
||||||
useMantineColorScheme,
|
useMantineColorScheme
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import {
|
import {
|
||||||
IconBuildingStore,
|
|
||||||
IconCategory,
|
IconCategory,
|
||||||
IconCurrency,
|
|
||||||
IconCurrencyDollar,
|
IconCurrencyDollar,
|
||||||
IconUsers,
|
IconTrendingUp,
|
||||||
|
IconUsers
|
||||||
} from "@tabler/icons-react";
|
} from "@tabler/icons-react";
|
||||||
|
|
||||||
interface KpiCardProps {
|
interface KpiCardProps {
|
||||||
@@ -22,9 +21,10 @@ interface KpiCardProps {
|
|||||||
subtitle?: string;
|
subtitle?: string;
|
||||||
icon: React.ReactNode;
|
icon: React.ReactNode;
|
||||||
color: string;
|
color: string;
|
||||||
|
backgroundColor: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const KpiCard = ({ title, value, subtitle, icon, color }: KpiCardProps) => {
|
const KpiCard = ({ title, value, subtitle, icon, color, backgroundColor }: KpiCardProps) => {
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const dark = colorScheme === "dark";
|
const dark = colorScheme === "dark";
|
||||||
|
|
||||||
@@ -64,10 +64,10 @@ const KpiCard = ({ title, value, subtitle, icon, color }: KpiCardProps) => {
|
|||||||
</Text>
|
</Text>
|
||||||
)}
|
)}
|
||||||
</Stack>
|
</Stack>
|
||||||
<Badge
|
<Avatar
|
||||||
variant="light"
|
|
||||||
color={color}
|
color={color}
|
||||||
p={10}
|
bg={backgroundColor}
|
||||||
|
size={40}
|
||||||
radius="xl"
|
radius="xl"
|
||||||
style={{
|
style={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
@@ -76,7 +76,7 @@ const KpiCard = ({ title, value, subtitle, icon, color }: KpiCardProps) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{icon}
|
{icon}
|
||||||
</Badge>
|
</Avatar>
|
||||||
</Group>
|
</Group>
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
@@ -106,29 +106,33 @@ export const SummaryCards = ({ data }: SummaryCardsProps) => {
|
|||||||
title: "UMKM Aktif",
|
title: "UMKM Aktif",
|
||||||
value: displayData.umkmAktif,
|
value: displayData.umkmAktif,
|
||||||
subtitle: "Beroperasi",
|
subtitle: "Beroperasi",
|
||||||
icon: <IconCurrencyDollar size={20} />,
|
icon: <IconCurrencyDollar size={25} />,
|
||||||
color: "darmasaba-blue",
|
color: "white",
|
||||||
|
backgroundColor: "#1E3A5F"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "UMKM Terdaftar",
|
title: "UMKM Terdaftar",
|
||||||
value: displayData.umkmTerdaftar,
|
value: displayData.umkmTerdaftar,
|
||||||
subtitle: "Total registrasi",
|
subtitle: "Total registrasi",
|
||||||
icon: <IconBuildingStore size={20} />,
|
icon: <IconUsers size={25} />,
|
||||||
color: "darmasaba-success",
|
color: "white",
|
||||||
|
backgroundColor: "#1E3A5F"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Omzet",
|
title: "Omzet",
|
||||||
value: displayData.omzet,
|
value: displayData.omzet,
|
||||||
subtitle: "Omzet BUMDes per bulan",
|
subtitle: "Omzet BUMDes per bulan",
|
||||||
icon: <IconCurrency size={20} />,
|
icon: <IconTrendingUp size={25} />,
|
||||||
color: "darmasaba-warning",
|
color: "white",
|
||||||
|
backgroundColor: "#1E3A5F"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "UMKM Terbanyak",
|
title: "UMKM Terbanyak",
|
||||||
value: displayData.kategoriTerbanyak.count,
|
value: displayData.kategoriTerbanyak.count,
|
||||||
subtitle: `Kategori ${displayData.kategoriTerbanyak.name}`,
|
subtitle: `Kategori ${displayData.kategoriTerbanyak.name}`,
|
||||||
icon: <IconCategory size={20} />,
|
icon: <IconTrendingUp size={25} />,
|
||||||
color: "darmasaba-danger",
|
color: "white",
|
||||||
|
backgroundColor: "#1E3A5F"
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
25
src/hooks/use-sidebar-fullscreen.ts
Normal file
25
src/hooks/use-sidebar-fullscreen.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
|
|
||||||
|
export function useSidebarFullscreen() {
|
||||||
|
const [opened, { toggle: toggleMobile }] = useDisclosure();
|
||||||
|
const [sidebarCollapsed, setSidebarCollapsed] = useDisclosure(false);
|
||||||
|
|
||||||
|
const toggleSidebar = () => {
|
||||||
|
setSidebarCollapsed.toggle();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleMainClick = () => {
|
||||||
|
if (!sidebarCollapsed) {
|
||||||
|
toggleSidebar();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
isCollapsed: sidebarCollapsed,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import HelpPage from "@/components/help-page";
|
import HelpPage from "@/components/help-page";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/bantuan")({
|
export const Route = createFileRoute("/bantuan")({
|
||||||
component: BantuanRoute,
|
component: BantuanRoute,
|
||||||
});
|
});
|
||||||
|
|
||||||
function BantuanRoute() {
|
function BantuanRoute() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function BantuanRoute() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function BantuanRoute() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<HelpPage />
|
<HelpPage />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import BumdesPage from "@/components/bumdes-page";
|
import BumdesPage from "@/components/bumdes-page";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/bumdes")({
|
export const Route = createFileRoute("/bumdes")({
|
||||||
component: BumdesRoute,
|
component: BumdesRoute,
|
||||||
});
|
});
|
||||||
|
|
||||||
function BumdesRoute() {
|
function BumdesRoute() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function BumdesRoute() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function BumdesRoute() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<BumdesPage />
|
<BumdesPage />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
import DemografiPekerjaan from "../components/demografi-pekerjaan";
|
import DemografiPekerjaan from "../components/demografi-pekerjaan";
|
||||||
|
|
||||||
export const Route = createFileRoute("/demografi-pekerjaan")({
|
export const Route = createFileRoute("/demografi-pekerjaan")({
|
||||||
@@ -10,7 +10,13 @@ export const Route = createFileRoute("/demografi-pekerjaan")({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function DemografiPekerjaanPage() {
|
function DemografiPekerjaanPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function DemografiPekerjaanPage() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function DemografiPekerjaanPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<DemografiPekerjaan />
|
<DemografiPekerjaan />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -11,25 +11,32 @@ export const Route = createFileRoute("/")({
|
|||||||
|
|
||||||
function DashboardPage() {
|
function DashboardPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const [opened, { toggle }] = useDisclosure();
|
||||||
|
const [sidebarCollapsed, setSidebarCollapsed] = useDisclosure(false);
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
const mainBgColor = colorScheme === "dark" ? "#11192D" : "#edf3f8ff";
|
const mainBgColor = colorScheme === "dark" ? "#11192D" : "#edf3f8ff";
|
||||||
|
|
||||||
|
const handleMainClick = () => {
|
||||||
|
if (!sidebarCollapsed) {
|
||||||
|
setSidebarCollapsed.toggle();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AppShell
|
<AppShell
|
||||||
header={{ height: 60 }}
|
header={{ height: 60 }}
|
||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
||||||
<Header />
|
<Header onSidebarToggle={setSidebarCollapsed.toggle} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +50,11 @@ function DashboardPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<DashboardContent />
|
<DashboardContent />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import JennaAnalytic from "@/components/jenna-analytic";
|
import JennaAnalytic from "@/components/jenna-analytic";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/jenna-analytic")({
|
export const Route = createFileRoute("/jenna-analytic")({
|
||||||
component: JennaAnalyticPage,
|
component: JennaAnalyticPage,
|
||||||
});
|
});
|
||||||
|
|
||||||
function JennaAnalyticPage() {
|
function JennaAnalyticPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function JennaAnalyticPage() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function JennaAnalyticPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<JennaAnalytic />
|
<JennaAnalytic />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import KeamananPage from "@/components/keamanan-page";
|
import KeamananPage from "@/components/keamanan-page";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/keamanan")({
|
export const Route = createFileRoute("/keamanan")({
|
||||||
component: KeamananRoute,
|
component: KeamananRoute,
|
||||||
});
|
});
|
||||||
|
|
||||||
function KeamananRoute() {
|
function KeamananRoute() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function KeamananRoute() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function KeamananRoute() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<KeamananPage />
|
<KeamananPage />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import KeuanganAnggaran from "@/components/keuangan-anggaran";
|
import KeuanganAnggaran from "@/components/keuangan-anggaran";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/keuangan-anggaran")({
|
export const Route = createFileRoute("/keuangan-anggaran")({
|
||||||
component: KeuanganAnggaranPage,
|
component: KeuanganAnggaranPage,
|
||||||
});
|
});
|
||||||
|
|
||||||
function KeuanganAnggaranPage() {
|
function KeuanganAnggaranPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function KeuanganAnggaranPage() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function KeuanganAnggaranPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<KeuanganAnggaran />
|
<KeuanganAnggaran />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import KinerjaDivisi from "@/components/kinerja-divisi";
|
import KinerjaDivisi from "@/components/kinerja-divisi";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/kinerja-divisi")({
|
export const Route = createFileRoute("/kinerja-divisi")({
|
||||||
component: KinerjaDivisiPage,
|
component: KinerjaDivisiPage,
|
||||||
});
|
});
|
||||||
|
|
||||||
function KinerjaDivisiPage() {
|
function KinerjaDivisiPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function KinerjaDivisiPage() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function KinerjaDivisiPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<KinerjaDivisi />
|
<KinerjaDivisi />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import PengaduanLayananPublik from "@/components/pengaduan-layanan-publik";
|
import PengaduanLayananPublik from "@/components/pengaduan-layanan-publik";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/pengaduan-layanan-publik")({
|
export const Route = createFileRoute("/pengaduan-layanan-publik")({
|
||||||
component: PengaduanLayananPublikPage,
|
component: PengaduanLayananPublikPage,
|
||||||
});
|
});
|
||||||
|
|
||||||
function PengaduanLayananPublikPage() {
|
function PengaduanLayananPublikPage() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function PengaduanLayananPublikPage() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function PengaduanLayananPublikPage() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<PengaduanLayananPublik />
|
<PengaduanLayananPublik />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure, useMediaQuery } from "@mantine/hooks";
|
import { useMediaQuery } from "@mantine/hooks";
|
||||||
import {
|
import {
|
||||||
createFileRoute,
|
createFileRoute,
|
||||||
Outlet,
|
Outlet,
|
||||||
@@ -8,13 +8,20 @@ import {
|
|||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/pengaturan")({
|
export const Route = createFileRoute("/pengaturan")({
|
||||||
component: PengaturanLayout,
|
component: PengaturanLayout,
|
||||||
});
|
});
|
||||||
|
|
||||||
function PengaturanLayout() {
|
function PengaturanLayout() {
|
||||||
const [opened, { toggle, close }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
|
|
||||||
const isMobile = useMediaQuery("(max-width: 48em)");
|
const isMobile = useMediaQuery("(max-width: 48em)");
|
||||||
@@ -27,9 +34,9 @@ function PengaturanLayout() {
|
|||||||
// Auto close navbar on route change (mobile only)
|
// Auto close navbar on route change (mobile only)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isMobile && opened) {
|
if (isMobile && opened) {
|
||||||
close();
|
toggleMobile();
|
||||||
}
|
}
|
||||||
}, [routerState.location.pathname, isMobile, opened, close]);
|
}, [routerState.location.pathname, isMobile, opened, toggleMobile]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AppShell
|
<AppShell
|
||||||
@@ -37,14 +44,19 @@ function PengaturanLayout() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="lg" align="center" wrap="nowrap">
|
<Group h="100%" px="lg" align="center" wrap="nowrap">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -58,7 +70,11 @@ function PengaturanLayout() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<div className="p-2">
|
<div className="p-2">
|
||||||
<Outlet />
|
<Outlet />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
import { AppShell, Burger, Group, useMantineColorScheme } from "@mantine/core";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
|
||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
import { Header } from "@/components/header";
|
import { Header } from "@/components/header";
|
||||||
import { Sidebar } from "@/components/sidebar";
|
import { Sidebar } from "@/components/sidebar";
|
||||||
import SosialPage from "@/components/sosial-page";
|
import SosialPage from "@/components/sosial-page";
|
||||||
|
import { useSidebarFullscreen } from "@/hooks/use-sidebar-fullscreen";
|
||||||
|
|
||||||
export const Route = createFileRoute("/sosial")({
|
export const Route = createFileRoute("/sosial")({
|
||||||
component: SosialRoute,
|
component: SosialRoute,
|
||||||
});
|
});
|
||||||
|
|
||||||
function SosialRoute() {
|
function SosialRoute() {
|
||||||
const [opened, { toggle }] = useDisclosure();
|
const {
|
||||||
|
opened,
|
||||||
|
toggleMobile,
|
||||||
|
sidebarCollapsed,
|
||||||
|
toggleSidebar,
|
||||||
|
handleMainClick,
|
||||||
|
} = useSidebarFullscreen();
|
||||||
const { colorScheme } = useMantineColorScheme();
|
const { colorScheme } = useMantineColorScheme();
|
||||||
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
const headerBgColor = colorScheme === "dark" ? "#11192D" : "#19355E";
|
||||||
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
const navbarBgColor = colorScheme === "dark" ? "#11192D" : "white";
|
||||||
@@ -22,14 +28,19 @@ function SosialRoute() {
|
|||||||
navbar={{
|
navbar={{
|
||||||
width: 300,
|
width: 300,
|
||||||
breakpoint: "sm",
|
breakpoint: "sm",
|
||||||
collapsed: { mobile: !opened },
|
collapsed: { mobile: !opened, desktop: sidebarCollapsed },
|
||||||
}}
|
}}
|
||||||
padding="md"
|
padding="md"
|
||||||
>
|
>
|
||||||
<AppShell.Header bg={headerBgColor}>
|
<AppShell.Header bg={headerBgColor}>
|
||||||
<Group h="100%" px="md">
|
<Group h="100%" px="md">
|
||||||
<Burger opened={opened} onClick={toggle} hiddenFrom="sm" size="sm" />
|
<Burger
|
||||||
<Header />
|
opened={opened}
|
||||||
|
onClick={toggleMobile}
|
||||||
|
hiddenFrom="sm"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
<Header onSidebarToggle={toggleSidebar} />
|
||||||
</Group>
|
</Group>
|
||||||
</AppShell.Header>
|
</AppShell.Header>
|
||||||
|
|
||||||
@@ -43,7 +54,11 @@ function SosialRoute() {
|
|||||||
</div>
|
</div>
|
||||||
</AppShell.Navbar>
|
</AppShell.Navbar>
|
||||||
|
|
||||||
<AppShell.Main bg={mainBgColor}>
|
<AppShell.Main
|
||||||
|
bg={mainBgColor}
|
||||||
|
onClick={handleMainClick}
|
||||||
|
style={{ cursor: sidebarCollapsed ? "default" : "pointer" }}
|
||||||
|
>
|
||||||
<SosialPage />
|
<SosialPage />
|
||||||
</AppShell.Main>
|
</AppShell.Main>
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
Reference in New Issue
Block a user