Semua tooltips di admin sudah dihilangkan

This commit is contained in:
2025-11-07 14:38:32 +08:00
parent db8909b9ed
commit 417a8937f5
195 changed files with 2479 additions and 3083 deletions

View File

@@ -3,9 +3,9 @@
"version": "0.1.5", "version": "0.1.5",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "bun --bun next dev", "dev": "next dev",
"build": "bun --bun next build", "build": "next build",
"start": "bun --bun next start" "start": "next start"
}, },
"prisma": { "prisma": {
"seed": "bun run prisma/seed.ts" "seed": "bun run prisma/seed.ts"

View File

@@ -93,6 +93,34 @@ const sdgsDesa = proxy({
} }
}, },
}, },
findManyAll: {
data: null as any[] | null,
loading: false,
load: async () => { // Change to arrow function
sdgsDesa.findManyAll.loading = true; // Use the full path to access the property
try {
const query: any = {};
const res = await ApiFetch.api.landingpage.sdgsdesa[
"findManyAll"
].get({
query,
});
if (res.status === 200 && res.data?.success) {
sdgsDesa.findManyAll.data = res.data.data || [];
} else {
console.error("Failed to load media sosial:", res.data?.message);
sdgsDesa.findManyAll.data = [];
}
} catch (error) {
console.error("Error loading media sosial:", error);
sdgsDesa.findManyAll.data = [];
} finally {
sdgsDesa.findManyAll.loading = false;
}
},
},
findUnique: { findUnique: {
data: null as Prisma.SdgsDesaGetPayload<{ data: null as Prisma.SdgsDesaGetPayload<{
include: { include: {

View File

@@ -2,23 +2,22 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
ScrollArea,
Stack, Stack,
Tabs, Tabs,
TabsList, TabsList,
TabsPanel, TabsPanel,
TabsTab, TabsTab,
Title, Title
Tooltip,
ScrollArea,
} from '@mantine/core'; } from '@mantine/core';
import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react';
import { import {
IconFileAnalytics,
IconCoins, IconCoins,
IconFileAnalytics,
IconShoppingCart, IconShoppingCart,
IconWallet, IconWallet,
} from '@tabler/icons-react'; } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react';
function LayoutTabs({ children }: { children: React.ReactNode }) { function LayoutTabs({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -29,29 +28,25 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
label: "APB Desa", label: "APB Desa",
value: "apbdesa", value: "apbdesa",
href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa", href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa",
icon: <IconFileAnalytics size={18} stroke={1.8} />, icon: <IconFileAnalytics size={18} stroke={1.8} />
tooltip: "Lihat ringkasan Anggaran Pendapatan dan Belanja Desa",
}, },
{ {
label: "Pendapatan", label: "Pendapatan",
value: "pendapatan", value: "pendapatan",
href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/pendapatan", href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/pendapatan",
icon: <IconCoins size={18} stroke={1.8} />, icon: <IconCoins size={18} stroke={1.8} />,
tooltip: "Kelola data pendapatan desa",
}, },
{ {
label: "Belanja", label: "Belanja",
value: "belanja", value: "belanja",
href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja", href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja",
icon: <IconShoppingCart size={18} stroke={1.8} />, icon: <IconShoppingCart size={18} stroke={1.8} />,
tooltip: "Atur data belanja desa",
}, },
{ {
label: "Pembiayaan", label: "Pembiayaan",
value: "pembiayaan", value: "pembiayaan",
href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/pembiayaan", href: "/admin/ekonomi/PADesa-pendapatan-asli-desa/pembiayaan",
icon: <IconWallet size={18} stroke={1.8} />, icon: <IconWallet size={18} stroke={1.8} />,
tooltip: "Kelola data pembiayaan desa",
}, },
]; ];
@@ -104,26 +99,19 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: "pop", duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -6,15 +6,14 @@ import colors from '@/con/colors';
import { import {
Box, Box,
Button, Button,
Group,
MultiSelect, MultiSelect,
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
Group,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
@@ -88,16 +87,14 @@ function EditAPBDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit APB Desa Edit APB Desa
</Title> </Title>

View File

@@ -9,8 +9,7 @@ import {
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
@@ -159,36 +158,32 @@ function DetailAPBDesa() {
</Box> </Box>
<Group gap="sm" mt={10}> <Group gap="sm" mt={10}>
<Tooltip label="Hapus APB Desa" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit APB Desa" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() =>
onClick={() => router.push(
router.push( `/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/${data.id}/edit`
`/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/${data.id}/edit` )
) }
} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -12,8 +12,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
@@ -43,11 +42,9 @@ function CreateAPBDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah APB Desa Tambah APB Desa
</Title> </Title>

View File

@@ -5,8 +5,8 @@ import {
Button, Button,
Center, Center,
Group, Group,
Paper,
Pagination, Pagination,
Paper,
Skeleton, Skeleton,
Stack, Stack,
Table, Table,
@@ -15,8 +15,7 @@ import {
TableTh, TableTh,
TableThead, TableThead,
TableTr, TableTr,
Text, Text
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImacCog, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImacCog, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -82,20 +81,18 @@ function ListAPBDesa({ search }: { search: string }) {
<Text fw={600} fz="lg"> <Text fw={600} fz="lg">
List APB Desa List APB Desa
</Text> </Text>
<Tooltip label="Tambah APB Desa" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( "/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/create"
"/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/create" )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: "auto" }}> <Box style={{ overflowX: "auto" }}>
<Table highlightOnHover> <Table highlightOnHover>
@@ -138,20 +135,18 @@ function ListAPBDesa({ search }: { search: string }) {
)} )}
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Lihat Detail" withArrow> <Button
<Button variant="light"
variant="light" color="green"
color="green" onClick={() =>
onClick={() => router.push(
router.push( `/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/${item.id}`
`/admin/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/${item.id}` )
) }
} >
> <IconDeviceImacCog size={20} />
<IconDeviceImacCog size={20} /> <Text ml={5}>Detail</Text>
<Text ml={5}>Detail</Text> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -10,8 +10,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -90,16 +89,14 @@ function EditBelanja() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jenis Belanja Edit Jenis Belanja
</Title> </Title>

View File

@@ -10,13 +10,12 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function CreateBelanja() { function CreateBelanja() {
const belanjaState = useProxy(PendapatanAsliDesa.belanja); const belanjaState = useProxy(PendapatanAsliDesa.belanja);
@@ -57,16 +56,14 @@ function CreateBelanja() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan back button */} {/* Header dengan back button */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jenis Belanja Tambah Jenis Belanja
</Title> </Title>

View File

@@ -17,8 +17,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
@@ -96,18 +95,16 @@ function ListBelanja({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Belanja</Title> <Title order={4}>Daftar Belanja</Title>
<Tooltip label="Tambah Belanja" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja/create')
router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
@@ -138,34 +135,30 @@ function ListBelanja({ search }: { search: string }) {
</TableTd> </TableTd>
<TableTd> <TableTd>
<Group gap="xs"> <Group gap="xs">
<Tooltip label="Edit" withArrow> <Button
<Button size="xs"
size="xs" variant="light"
variant="light" color="green"
color="green" onClick={() =>
onClick={() => router.push(
router.push( `/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja/${item.id}`
`/admin/ekonomi/PADesa-pendapatan-asli-desa/belanja/${item.id}` )
) }
} >
> <IconEdit size={16} />
<IconEdit size={16} /> </Button>
</Button> <Button
</Tooltip> size="xs"
<Tooltip label="Hapus" withArrow> variant="light"
<Button color="red"
size="xs" disabled={belanjaState.delete.loading}
variant="light" onClick={() => {
color="red" setSelectedId(item.id);
disabled={belanjaState.delete.loading} setModalHapus(true);
onClick={() => { }}
setSelectedId(item.id); >
setModalHapus(true); <IconTrash size={16} />
}} </Button>
>
<IconTrash size={16} />
</Button>
</Tooltip>
</Group> </Group>
</TableTd> </TableTd>
</TableTr> </TableTr>

View File

@@ -9,8 +9,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -87,16 +86,14 @@ function EditPembiayaan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jenis Pembiayaan Edit Jenis Pembiayaan
</Title> </Title>

View File

@@ -1,8 +1,5 @@
'use client'; 'use client';
import React from 'react';
import { useProxy } from 'valtio/utils';
import PendapatanAsliDesa from '@/app/admin/(dashboard)/_state/ekonomi/PADesa'; import PendapatanAsliDesa from '@/app/admin/(dashboard)/_state/ekonomi/PADesa';
import { useRouter } from 'next/navigation';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
Box, Box,
@@ -10,13 +7,14 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Title,
TextInput,
Text, Text,
Tooltip, TextInput,
Title
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function CreatePembiayaan() { function CreatePembiayaan() {
const pembiayaanState = useProxy(PendapatanAsliDesa.pembiayaan); const pembiayaanState = useProxy(PendapatanAsliDesa.pembiayaan);
@@ -57,16 +55,14 @@ function CreatePembiayaan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jenis Pembiayaan Tambah Jenis Pembiayaan
</Title> </Title>

View File

@@ -1,9 +1,11 @@
'use client' 'use client'
import colors from '@/con/colors';
import { import {
Box, Box,
Button, Button,
Center, Center,
Group, Group,
Pagination,
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
@@ -14,19 +16,16 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
Pagination,
} from '@mantine/core'; } from '@mantine/core';
import React, { useState } from 'react';
import HeaderSearch from '../../../_com/header';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
import PendapatanAsliDesa from '../../../_state/ekonomi/PADesa';
import { useProxy } from 'valtio/utils';
import { useRouter } from 'next/navigation';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import colors from '@/con/colors'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import HeaderSearch from '../../../_com/header';
import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
import PendapatanAsliDesa from '../../../_state/ekonomi/PADesa';
function Pembiayaan() { function Pembiayaan() {
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
@@ -95,18 +94,16 @@ function ListPembiayaan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Pembiayaan</Title> <Title order={4}>Daftar Pembiayaan</Title>
<Tooltip label="Tambah Pembiayaan" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/pembiayaan/create')
router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/pembiayaan/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -9,8 +9,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -94,16 +93,14 @@ function EditPendapatan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header with Back Button */} {/* Header with Back Button */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jenis Pendapatan Edit Jenis Pendapatan
</Title> </Title>

View File

@@ -8,8 +8,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -49,16 +48,14 @@ function CreatePendapatan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol back + judul */} {/* Header dengan tombol back + judul */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jenis Pendapatan Tambah Jenis Pendapatan
</Title> </Title>

View File

@@ -17,8 +17,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
@@ -96,18 +95,16 @@ function ListPendapatan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p={'lg'} shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p={'lg'} shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Pendapatan</Title> <Title order={4}>Daftar Pendapatan</Title>
<Tooltip label="Tambah Pendapatan Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/pendapatan/create')
router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/pendapatan/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -9,12 +9,11 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState, useCallback } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import demografiPekerjaan from '../../../_state/ekonomi/demografi-pekerjaan'; import demografiPekerjaan from '../../../_state/ekonomi/demografi-pekerjaan';
@@ -96,16 +95,14 @@ export default function EditDemografiPekerjaan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Demografi Pekerjaan Edit Demografi Pekerjaan
</Title> </Title>

View File

@@ -10,8 +10,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -49,16 +48,14 @@ function CreateDemografiPekerjaan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Demografi Pekerjaan Tambah Demografi Pekerjaan
</Title> </Title>

View File

@@ -6,7 +6,9 @@ import {
Box, Box,
Button, Button,
Center, Center,
Flex,
Group, Group,
Pagination,
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
@@ -17,10 +19,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
Pagination,
Flex,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
@@ -111,16 +110,14 @@ function ListDemografiPekerjaan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>List Demografi Pekerjaan</Title> <Title order={4}>List Demografi Pekerjaan</Title>
<Tooltip label="Tambah Data Pekerjaan" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/ekonomi/demografi-pekerjaan/create')}
onClick={() => router.push('/admin/ekonomi/demografi-pekerjaan/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -6,18 +6,17 @@ import colors from '@/con/colors';
import { import {
Box, Box,
Button, Button,
Group,
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Group,
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function EditJumlahPendudukMiskin() { function EditJumlahPendudukMiskin() {
const router = useRouter(); const router = useRouter();
@@ -82,16 +81,14 @@ function EditJumlahPendudukMiskin() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jumlah Penduduk Miskin Edit Jumlah Penduduk Miskin
</Title> </Title>

View File

@@ -1,12 +1,12 @@
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
'use client'; 'use client';
import { Box, Button, Group, Paper, Stack, TextInput, Title, Tooltip } from '@mantine/core'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import colors from '@/con/colors';
import jumlahPendudukMiskin from '../../../_state/ekonomi/jumlah-penduduk-miskin'; import jumlahPendudukMiskin from '../../../_state/ekonomi/jumlah-penduduk-miskin';
export default function CreateJumlahPendudukMiskin() { export default function CreateJumlahPendudukMiskin() {
@@ -38,11 +38,9 @@ export default function CreateJumlahPendudukMiskin() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jumlah Penduduk Miskin Tambah Jumlah Penduduk Miskin
</Title> </Title>

View File

@@ -16,11 +16,10 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconSearch, IconTrash, IconPlus } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
@@ -101,18 +100,16 @@ function ListJumlahPendudukMiskin({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Jumlah Penduduk Miskin</Title> <Title order={4}>Daftar Jumlah Penduduk Miskin</Title>
<Tooltip label="Tambah Data" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/ekonomi/jumlah-penduduk-miskin/create')
router.push('/admin/ekonomi/jumlah-penduduk-miskin/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -2,18 +2,17 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
ScrollArea,
Stack, Stack,
Tabs, Tabs,
TabsList, TabsList,
TabsPanel, TabsPanel,
TabsTab, TabsTab,
Title, Title
Tooltip,
ScrollArea,
} from '@mantine/core'; } from '@mantine/core';
import { IconSchool, IconUsers } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { IconUsers, IconSchool } from '@tabler/icons-react';
function LayoutTabs({ children }: { children: React.ReactNode }) { function LayoutTabs({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -24,15 +23,13 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
label: "Pengangguran Berdasarkan Usia", label: "Pengangguran Berdasarkan Usia",
value: "pengangguranberdasarkanusia", value: "pengangguranberdasarkanusia",
href: "/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_usia", href: "/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_usia",
icon: <IconUsers size={18} stroke={1.8} />, icon: <IconUsers size={18} stroke={1.8} />
tooltip: "Data pengangguran menurut kelompok usia",
}, },
{ {
label: "Pengangguran Berdasarkan Pendidikan", label: "Pengangguran Berdasarkan Pendidikan",
value: "pengangguranberdasarkanpendidikan", value: "pengangguranberdasarkanpendidikan",
href: "/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan", href: "/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan",
icon: <IconSchool size={18} stroke={1.8} />, icon: <IconSchool size={18} stroke={1.8} />
tooltip: "Data pengangguran menurut tingkat pendidikan",
}, },
]; ];
@@ -78,26 +75,19 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: "pop", duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -2,7 +2,7 @@
'use client'; 'use client';
import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur'; import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -40,7 +40,7 @@ function EditGrafikBerdasarkanPendidikan() {
} }
}, [id]); }, [id]);
const handleChange = (field: keyof typeof formData) => const handleChange = (field: keyof typeof formData) =>
(e: React.ChangeEvent<HTMLInputElement>) => { (e: React.ChangeEvent<HTMLInputElement>) => {
setFormData((prev) => ({ setFormData((prev) => ({
...prev, ...prev,
@@ -60,16 +60,14 @@ function EditGrafikBerdasarkanPendidikan() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Grafik Pengangguran Berdasarkan Pendidikan Edit Grafik Pengangguran Berdasarkan Pendidikan
</Title> </Title>

View File

@@ -1,14 +1,13 @@
'use client'; 'use client';
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import React from 'react';
import { useRouter } from 'next/navigation';
import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur'; import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur';
import { useProxy } from 'valtio/utils';
import { useState } from 'react';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Paper, Stack, Title, TextInput, Group, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils';
function CreateGrafikBerdasarkanPendidikan() { function CreateGrafikBerdasarkanPendidikan() {
const router = useRouter(); const router = useRouter();
@@ -44,11 +43,9 @@ function CreateGrafikBerdasarkanPendidikan() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Data Pengangguran Berdasarkan Pendidikan Tambah Data Pengangguran Berdasarkan Pendidikan
</Title> </Title>

View File

@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { DonutChart } from '@mantine/charts';
import { import {
Box, Box,
Button, Button,
@@ -17,15 +18,13 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import { DonutChart } from '@mantine/charts';
import HeaderSearch from '../../../_com/header'; import HeaderSearch from '../../../_com/header';
import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
import grafikNganggur from '../../../_state/ekonomi/usia-kerja-nganggur'; import grafikNganggur from '../../../_state/ekonomi/usia-kerja-nganggur';
@@ -116,20 +115,18 @@ function ListGrafikBerdasarkanPendidikan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Flex justify="space-between" align="center" mb="md"> <Flex justify="space-between" align="center" mb="md">
<Title order={4}>List Pengangguran Berdasarkan Pendidikan</Title> <Title order={4}>List Pengangguran Berdasarkan Pendidikan</Title>
<Tooltip label="Tambah Data" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan/create',
'/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan/create', )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Flex> </Flex>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
@@ -165,34 +162,30 @@ function ListGrafikBerdasarkanPendidikan({ search }: { search: string }) {
<TableTd>{item.D3}</TableTd> <TableTd>{item.D3}</TableTd>
<TableTd>{item.S1}</TableTd> <TableTd>{item.S1}</TableTd>
<TableTd> <TableTd>
<Tooltip label="Edit Data" withArrow> <Button
<Button color="green"
color="green" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( `/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan/${item.id}`,
`/admin/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran_berdasarkan_pendidikan/${item.id}`, )
) }
} >
> <IconEdit size={18} />
<IconEdit size={18} /> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Hapus Data" withArrow> <Button
<Button color="red"
color="red" variant="light"
variant="light" disabled={stategrafik.delete.loading}
disabled={stategrafik.delete.loading} onClick={() => {
onClick={() => { setSelectedId(item.id);
setSelectedId(item.id); setModalHapus(true);
setModalHapus(true); }}
}} >
> <IconTrash size={18} />
<IconTrash size={18} /> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -5,18 +5,17 @@ import colors from '@/con/colors';
import { import {
Box, Box,
Button, Button,
Group,
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Group,
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() { function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
const router = useRouter(); const router = useRouter();
@@ -79,16 +78,14 @@ function EditGrafikBerdasarkanUsiaKerjaYangMenganggur() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Grafik Pengangguran Berdasarkan Usia Kerja Edit Grafik Pengangguran Berdasarkan Usia Kerja
</Title> </Title>

View File

@@ -2,13 +2,13 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
'use client'; 'use client';
import React, { useState } from 'react';
import { useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils';
import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur'; import grafikNganggur from '@/app/admin/(dashboard)/_state/ekonomi/usia-kerja-nganggur';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Paper, Stack, Title, TextInput, Group, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils';
function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() { function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
const router = useRouter(); const router = useRouter();
@@ -42,11 +42,9 @@ function CreateGrafikBerdasarkanUsiaKerjaYangMenganggur() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Data Pengangguran Berdasarkan Usia Tambah Data Pengangguran Berdasarkan Usia
</Title> </Title>

View File

@@ -2,7 +2,7 @@
import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus';
import jumlahPengangguranState from '@/app/admin/(dashboard)/_state/ekonomi/jumlah-pengangguran'; import jumlahPengangguranState from '@/app/admin/(dashboard)/_state/ekonomi/jumlah-pengangguran';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Flex, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Flex, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconX } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -103,32 +103,28 @@ function DetailJumlahPengangguran() {
{/* Tombol Edit & Hapus */} {/* Tombol Edit & Hapus */}
<Flex gap="sm"> <Flex gap="sm">
<Tooltip label="Hapus Data Pengangguran" withArrow position="top"> <Button
<Button onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} color="red"
color="red" variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconX size={20} />
<IconX size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Data Pengangguran" withArrow position="top"> <Button
<Button onClick={() => router.push(`/admin/ekonomi/jumlah-pengangguran/${data.id}/edit`)}
onClick={() => router.push(`/admin/ekonomi/jumlah-pengangguran/${data.id}/edit`)} color="green"
color="green" variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Flex> </Flex>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -7,13 +7,12 @@ import {
Box, Box,
Button, Button,
Group, Group,
NumberInput,
Paper, Paper,
Select,
Stack, Stack,
Text, Text,
NumberInput, Title
Title,
Select,
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -89,16 +88,14 @@ function CreateJumlahPengangguran() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Data Pengangguran Tambah Data Pengangguran
</Title> </Title>

View File

@@ -1,17 +1,17 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { BarChart } from '@mantine/charts';
import { import {
Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack,
Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Table, TableTbody, TableTd, TableTh, TableThead, TableTr,
Text, Title, Tooltip Text, Title
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import { BarChart } from '@mantine/charts';
import HeaderSearch from '../../_com/header'; import HeaderSearch from '../../_com/header';
import jumlahPengangguranState from '../../_state/ekonomi/jumlah-pengangguran'; import jumlahPengangguranState from '../../_state/ekonomi/jumlah-pengangguran';
@@ -85,16 +85,14 @@ function ListDetailDataPengangguran({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Detail Data Pengangguran</Title> <Title order={4}>Daftar Detail Data Pengangguran</Title>
<Tooltip label="Tambah Data Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/ekonomi/jumlah-pengangguran/create')}
onClick={() => router.push('/admin/ekonomi/jumlah-pengangguran/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -11,8 +11,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -88,13 +87,10 @@ function EditLowonganKerja() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol back */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Lowongan Kerja Lokal Edit Lowongan Kerja Lokal
</Title> </Title>

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { Box, Button, Group, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -108,32 +108,28 @@ function DetailLowonganKerjaLokal() {
</Box> </Box>
<Group gap="sm" mt="sm"> <Group gap="sm" mt="sm">
<Tooltip label="Hapus Lowongan" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Lowongan" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/ekonomi/lowongan-kerja-lokal/${data.id}/edit`)}
onClick={() => router.push(`/admin/ekonomi/lowongan-kerja-lokal/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -8,8 +8,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -42,18 +41,15 @@ function CreateLowonganKerja() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol kembali */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Lowongan Kerja Lokal Tambah Lowongan Kerja Lokal
</Title> </Title>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -69,7 +68,6 @@ function ListLowonganKerjaLokal({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Lowongan Kerja Lokal</Title> <Title order={4}>Daftar Lowongan Kerja Lokal</Title>
<Tooltip label="Tambah Lowongan Kerja" withArrow>
<Button <Button
leftSection={<IconPlus size={18} />} leftSection={<IconPlus size={18} />}
color="blue" color="blue"
@@ -80,7 +78,6 @@ function ListLowonganKerjaLokal({ search }: { search: string }) {
> >
Tambah Baru Tambah Baru
</Button> </Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -2,18 +2,17 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
ScrollArea,
Stack, Stack,
Tabs, Tabs,
TabsList, TabsList,
TabsPanel, TabsPanel,
TabsTab, TabsTab,
Title, Title
Tooltip,
ScrollArea,
} from '@mantine/core'; } from '@mantine/core';
import { IconCategory, IconShoppingBag } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { IconShoppingBag, IconCategory } from '@tabler/icons-react';
function LayoutTabs({ children }: { children: React.ReactNode }) { function LayoutTabs({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -30,8 +29,7 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
label: "Kategori Produk", label: "Kategori Produk",
value: "kategoriproduk", value: "kategoriproduk",
href: "/admin/ekonomi/pasar-desa/kategori-produk", href: "/admin/ekonomi/pasar-desa/kategori-produk",
icon: <IconCategory size={18} stroke={1.8} />, icon: <IconCategory size={18} stroke={1.8} />
tooltip: "Atur kategori produk pasar desa",
}, },
]; ];
@@ -84,26 +82,19 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: "pop", duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -1,9 +1,5 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import React, { useEffect, useState } from 'react';
import { useParams, useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils';
import pasarDesaState from '../../../../_state/ekonomi/pasar-desa/pasar-desa';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
Box, Box,
@@ -11,13 +7,16 @@ import {
Group, Group,
Paper, Paper,
Stack, Stack,
Title,
TextInput,
Tooltip,
Text, Text,
TextInput,
Title
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
import pasarDesaState from '../../../../_state/ekonomi/pasar-desa/pasar-desa';
function EditKategoriProduk() { function EditKategoriProduk() {
const router = useRouter(); const router = useRouter();
@@ -93,16 +92,14 @@ function EditKategoriProduk() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol back */} {/* Header dengan tombol back */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Kategori Produk Edit Kategori Produk
</Title> </Title>

View File

@@ -8,8 +8,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -46,7 +45,6 @@ function CreateKategoriProduk() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol kembali */} {/* Header dengan tombol kembali */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow>
<Button <Button
variant="subtle" variant="subtle"
onClick={() => router.back()} onClick={() => router.back()}
@@ -55,7 +53,6 @@ function CreateKategoriProduk() {
> >
<IconArrowBack color={colors['blue-button']} size={24} /> <IconArrowBack color={colors['blue-button']} size={24} />
</Button> </Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Kategori Produk Tambah Kategori Produk
</Title> </Title>

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title, Tooltip } from '@mantine/core'; import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconX } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -68,7 +68,6 @@ function ListKategoriProduk({ search2 }: { search2: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Kategori Produk</Title> <Title order={4}>Daftar Kategori Produk</Title>
<Tooltip label="Tambah Kategori Produk" withArrow>
<Button <Button
leftSection={<IconPlus size={18} />} leftSection={<IconPlus size={18} />}
color="blue" color="blue"
@@ -77,7 +76,6 @@ function ListKategoriProduk({ search2 }: { search2: string }) {
> >
Tambah Baru Tambah Baru
</Button> </Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
@@ -99,7 +97,6 @@ function ListKategoriProduk({ search2 }: { search2: string }) {
</Text> </Text>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Edit Kategori Produk" withArrow>
<Button <Button
color="green" color="green"
variant="light" variant="light"
@@ -107,10 +104,8 @@ function ListKategoriProduk({ search2 }: { search2: string }) {
> >
<IconEdit size={18} /> <IconEdit size={18} />
</Button> </Button>
</Tooltip>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Hapus Kategori Produk" withArrow>
<Button <Button
color="red" color="red"
variant="light" variant="light"
@@ -121,8 +116,7 @@ function ListKategoriProduk({ search2 }: { search2: string }) {
> >
<IconX size={18} /> <IconX size={18} />
</Button> </Button>
</Tooltip> </TableTd>
</TableTd>
</TableTr> </TableTr>
)) ))
) : ( ) : (

View File

@@ -14,8 +14,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -117,11 +116,9 @@ function EditPasarDesa() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Pasar Desa Edit Pasar Desa
</Title> </Title>

View File

@@ -1,13 +1,13 @@
'use client' 'use client'
import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Paper, Stack, Text, Image, Skeleton, Group, Tooltip } from '@mantine/core'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { IconArrowBack, IconTrash, IconEdit } from '@tabler/icons-react'; import { useShallowEffect } from '@mantine/hooks';
import { useRouter, useParams } from 'next/navigation'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import React, { useState } from 'react'; import { useParams, useRouter } from 'next/navigation';
import { useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import pasarDesaState from '../../../../_state/ekonomi/pasar-desa/pasar-desa'; import pasarDesaState from '../../../../_state/ekonomi/pasar-desa/pasar-desa';
import { useShallowEffect } from '@mantine/hooks';
import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus';
function DetailPasarDesa() { function DetailPasarDesa() {
const statePasar = useProxy(pasarDesaState); const statePasar = useProxy(pasarDesaState);
@@ -123,32 +123,28 @@ function DetailPasarDesa() {
</Box> </Box>
<Group gap="sm"> <Group gap="sm">
<Tooltip label="Hapus Produk" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Produk" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/ekonomi/pasar-desa/produk-pasar-desa/${data.id}/edit`)}
onClick={() => router.push(`/admin/ekonomi/pasar-desa/produk-pasar-desa/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -12,8 +12,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -73,11 +72,9 @@ export default function CreatePasarDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol kembali */} {/* Header dengan tombol kembali */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Produk Pasar Desa Tambah Produk Pasar Desa
</Title> </Title>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -68,18 +67,16 @@ function ListPasarDesa({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Produk Pasar Desa</Title> <Title order={4}>Daftar Produk Pasar Desa</Title>
<Tooltip label="Tambah Produk Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/ekonomi/pasar-desa/produk-pasar-desa/create')
router.push('/admin/ekonomi/pasar-desa/produk-pasar-desa/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -13,14 +13,13 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState, useCallback } from 'react'; import { useCallback, useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
type Statistik = { type Statistik = {
tahun: string; tahun: string;
@@ -118,16 +117,14 @@ function EditProgramKemiskinan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Program Kemiskinan Edit Program Kemiskinan
</Title> </Title>

View File

@@ -8,17 +8,16 @@ import {
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import { IconKey, IconMapper } from '../../../_com/iconMap';
import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan'; import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan';
import { IconKey, IconMapper } from '../../../_com/iconMap';
function DetailProgramKemiskinan() { function DetailProgramKemiskinan() {
const programState = useProxy(programKemiskinanState); const programState = useProxy(programKemiskinanState);
@@ -123,33 +122,29 @@ function DetailProgramKemiskinan() {
{/* Action Buttons */} {/* Action Buttons */}
<Group gap="sm" mt="sm"> <Group gap="sm" mt="sm">
<Tooltip label="Hapus Program" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={programState.delete.loading}
disabled={programState.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Program" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/ekonomi/program-kemiskinan/${data.id}/edit`)}
onClick={() => router.push(`/admin/ekonomi/program-kemiskinan/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -11,17 +11,16 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils';
import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan';
import CreateEditor from '../../../_com/createEditor';
import SelectIconProgram from '../../../_com/selectIcon';
import { useState } from 'react'; import { useState } from 'react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils';
import CreateEditor from '../../../_com/createEditor';
import SelectIconProgram from '../../../_com/selectIcon';
import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan';
function CreateProgramKemiskinan() { function CreateProgramKemiskinan() {
const programState = useProxy(programKemiskinanState); const programState = useProxy(programKemiskinanState);
@@ -65,16 +64,14 @@ function CreateProgramKemiskinan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol back */} {/* Header dengan tombol back */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Program Kemiskinan Tambah Program Kemiskinan
</Title> </Title>

View File

@@ -1,7 +1,7 @@
'use client' 'use client'
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title, Tooltip } from '@mantine/core'; import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -69,11 +69,9 @@ function ListProgramKemiskinan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p={'lg'} shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p={'lg'} shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Program Kemiskinan</Title> <Title order={4}>Daftar Program Kemiskinan</Title>
<Tooltip label="Tambah Program Kemiskinan" withArrow> <Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/ekonomi/program-kemiskinan/create')}>
<Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/ekonomi/program-kemiskinan/create')}> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -1,6 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import EditEditor from '@/app/admin/(dashboard)/_com/editEditor';
import grafikSektorUnggulan from '@/app/admin/(dashboard)/_state/ekonomi/sektor-unggulan-desa'; import grafikSektorUnggulan from '@/app/admin/(dashboard)/_state/ekonomi/sektor-unggulan-desa';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { import {
@@ -11,15 +12,13 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import { useProxy } from 'valtio/utils';
function EditSektorUnggulanDesa() { function EditSektorUnggulanDesa() {
const router = useRouter(); const router = useRouter();
@@ -59,10 +58,10 @@ function EditSektorUnggulanDesa() {
const handleChange = const handleChange =
(field: keyof typeof formData) => (field: keyof typeof formData) =>
(e: React.ChangeEvent<HTMLInputElement>) => { (e: React.ChangeEvent<HTMLInputElement>) => {
const value = field === 'value' ? Number(e.currentTarget.value) : e.currentTarget.value; const value = field === 'value' ? Number(e.currentTarget.value) : e.currentTarget.value;
setFormData((prev) => ({ ...prev, [field]: value })); setFormData((prev) => ({ ...prev, [field]: value }));
}; };
const handleSubmit = async () => { const handleSubmit = async () => {
try { try {
@@ -80,16 +79,14 @@ function EditSektorUnggulanDesa() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={22} />
<IconArrowBack color={colors['blue-button']} size={22} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Sektor Unggulan Desa Edit Sektor Unggulan Desa
</Title> </Title>

View File

@@ -8,8 +8,7 @@ import {
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
@@ -92,36 +91,32 @@ function DetailSektorUnggulanDesa() {
{/* Tombol Aksi */} {/* Tombol Aksi */}
<Group gap="sm"> <Group gap="sm">
<Tooltip label="Hapus Sektor Unggulan" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Sektor Unggulan" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() =>
onClick={() => router.push(
router.push( `/admin/ekonomi/sektor-unggulan-desa/${data.id}/edit`
`/admin/ekonomi/sektor-unggulan-desa/${data.id}/edit` )
) }
} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -10,15 +10,14 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import grafikSektorUnggulan from '../../../_state/ekonomi/sektor-unggulan-desa';
import CreateEditor from '../../../_com/createEditor'; import CreateEditor from '../../../_com/createEditor';
import grafikSektorUnggulan from '../../../_state/ekonomi/sektor-unggulan-desa';
function CreateSektorUnggulanDesa() { function CreateSektorUnggulanDesa() {
const stateGrafik = useProxy(grafikSektorUnggulan); const stateGrafik = useProxy(grafikSektorUnggulan);
@@ -50,16 +49,14 @@ function CreateSektorUnggulanDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan back button */} {/* Header dengan back button */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Sektor Unggulan Desa Tambah Sektor Unggulan Desa
</Title> </Title>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -92,11 +91,9 @@ function ListSektorUnggulanDesa({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>List Sektor Unggulan Desa</Title> <Title order={4}>List Sektor Unggulan Desa</Title>
<Tooltip label="Tambah Sektor Unggulan Desa" withArrow> <Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/ekonomi/sektor-unggulan-desa/create')}>
<Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/ekonomi/sektor-unggulan-desa/create')}> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
{loading ? ( {loading ? (
<Skeleton height={300} radius="md" /> <Skeleton height={300} radius="md" />
@@ -127,16 +124,14 @@ function ListSektorUnggulanDesa({ search }: { search: string }) {
</Box> </Box>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Lihat detail sektor" withArrow> <Button
<Button variant="light"
variant="light" color="blue"
color="blue" onClick={() => router.push(`/admin/ekonomi/sektor-unggulan-desa/${item.id}`)}
onClick={() => router.push(`/admin/ekonomi/sektor-unggulan-desa/${item.id}`)} >
> <IconDeviceImac size={20} />
<IconDeviceImac size={20} /> <Text ml={6}>Detail</Text>
<Text ml={6}>Detail</Text> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -8,8 +8,7 @@ import {
TabsList, TabsList,
TabsPanel, TabsPanel,
TabsTab, TabsTab,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { import {
IconBuildingCommunity, IconBuildingCommunity,
@@ -28,22 +27,19 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
label: "Pegawai", label: "Pegawai",
value: "pegawai", value: "pegawai",
href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai", href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai",
icon: <IconUsers size={18} stroke={1.8} />, icon: <IconUsers size={18} stroke={1.8} />
tooltip: "Kelola data pegawai BUMDesa",
}, },
{ {
label: "Posisi Organisasi", label: "Posisi Organisasi",
value: "posisiorganisasi", value: "posisiorganisasi",
href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi", href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi",
icon: <IconHierarchy size={18} stroke={1.8} />, icon: <IconHierarchy size={18} stroke={1.8} />
tooltip: "Kelola daftar posisi organisasi",
}, },
{ {
label: "Struktur Organisasi", label: "Struktur Organisasi",
value: "strukturorganisasi", value: "strukturorganisasi",
href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/struktur-organisasi", href: "/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/struktur-organisasi",
icon: <IconBuildingCommunity size={18} stroke={1.8} />, icon: <IconBuildingCommunity size={18} stroke={1.8} />
tooltip: "Kelola struktur organisasi BUMDesa"
} }
]; ];
@@ -96,26 +92,19 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: "pop", duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
flexShrink: 0,
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>
@@ -135,7 +124,7 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
</TabsPanel> </TabsPanel>
))} ))}
</Tabs> </Tabs>
</Stack> </Stack >
); );
} }

View File

@@ -14,8 +14,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -110,11 +109,9 @@ export default function EditPegawaiBumDes() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark">Edit Data Pegawai PPID</Title> <Title order={4} ml="sm" c="dark">Edit Data Pegawai PPID</Title>
</Group> </Group>

View File

@@ -3,7 +3,7 @@ import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirma
import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi'; import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -150,32 +150,28 @@ function DetailPegawai() {
</Button> </Button>
<Group gap="sm" mt="md"> <Group gap="sm" mt="md">
<Tooltip label="Hapus Pegawai" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id || null);
setSelectedId(data.id || null); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Pegawai" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/${data.id}/edit`)}
onClick={() => router.push(`/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -4,7 +4,7 @@
import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi'; import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi';
import colors from '@/con/colors'; import colors from '@/con/colors';
import ApiFetch from '@/lib/api-fetch'; import ApiFetch from '@/lib/api-fetch';
import { Box, Button, Group, Image, Paper, Select, Stack, Text, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Image, Paper, Select, Stack, Text, TextInput, Title } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -75,11 +75,9 @@ function CreatePegawaiBumDes() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Pegawai BUMDesa Tambah Pegawai BUMDesa
</Title> </Title>

View File

@@ -1,7 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Badge, Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, ThemeIcon, Title, Tooltip } from '@mantine/core'; import { Badge, Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, ThemeIcon, Title } from '@mantine/core';
import { IconCheck, IconDeviceImacCog, IconPlus, IconSearch, IconX } from '@tabler/icons-react'; import { IconCheck, IconDeviceImacCog, IconPlus, IconSearch, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -59,16 +59,14 @@ function ListPegawaiBumdes({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Pegawai BUMDesa</Title> <Title order={4}>Daftar Pegawai BUMDesa</Title>
<Tooltip label="Tambah Pegawai Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/create')}
onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Center py="xl"> <Center py="xl">
<Text c="dimmed">Tidak ada data pegawai yang ditemukan</Text> <Text c="dimmed">Tidak ada data pegawai yang ditemukan</Text>
@@ -82,16 +80,14 @@ function ListPegawaiBumdes({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Pegawai BUMDesa</Title> <Title order={4}>Daftar Pegawai BUMDesa</Title>
<Tooltip label="Tambah Pegawai Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/create')}
onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: "auto" }}> <Box style={{ overflowX: "auto" }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -5,7 +5,7 @@
import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import EditEditor from '@/app/admin/(dashboard)/_com/editEditor';
import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi'; import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -84,11 +84,9 @@ function EditPosisiOrganisasiBumDes() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Posisi Organisasi BUMDes Edit Posisi Organisasi BUMDes
</Title> </Title>

View File

@@ -3,7 +3,7 @@
import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor'; import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor';
import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi'; import stateStrukturBumDes from '@/app/admin/(dashboard)/_state/ekonomi/struktur-organisasi/struktur-organisasi';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect } from 'react'; import { useEffect } from 'react';
@@ -13,7 +13,7 @@ import { useProxy } from 'valtio/utils';
function CreatePosisiOrganisasiBumDes() { function CreatePosisiOrganisasiBumDes() {
const router = useRouter(); const router = useRouter();
const stateOrganisasi = useProxy(stateStrukturBumDes.posisiOrganisasi); const stateOrganisasi = useProxy(stateStrukturBumDes.posisiOrganisasi);
useEffect(() => { useEffect(() => {
stateOrganisasi.findMany.load(); stateOrganisasi.findMany.load();
// Initialize form with default values // Initialize form with default values
@@ -22,7 +22,7 @@ function CreatePosisiOrganisasiBumDes() {
deskripsi: "", deskripsi: "",
hierarki: 0, hierarki: 0,
}; };
return () => { return () => {
// Clean up form on unmount // Clean up form on unmount
stateOrganisasi.create.form = { stateOrganisasi.create.form = {
@@ -38,7 +38,7 @@ function CreatePosisiOrganisasiBumDes() {
if (!stateOrganisasi.create.form.nama.trim()) { if (!stateOrganisasi.create.form.nama.trim()) {
return toast.error('Nama posisi tidak boleh kosong'); return toast.error('Nama posisi tidak boleh kosong');
} }
await stateOrganisasi.create.submit(); await stateOrganisasi.create.submit();
toast.success('Posisi organisasi berhasil ditambahkan'); toast.success('Posisi organisasi berhasil ditambahkan');
router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi'); router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi');
@@ -51,11 +51,9 @@ function CreatePosisiOrganisasiBumDes() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Posisi Organisasi BUMDes Tambah Posisi Organisasi BUMDes
</Title> </Title>
@@ -77,7 +75,7 @@ function CreatePosisiOrganisasiBumDes() {
onChange={(e) => (stateOrganisasi.create.form.nama = e.target.value)} onChange={(e) => (stateOrganisasi.create.form.nama = e.target.value)}
required required
/> />
<Box> <Box>
<Text fw="bold" fz="sm" mb={6}> <Text fw="bold" fz="sm" mb={6}>
Deskripsi Deskripsi
@@ -89,7 +87,7 @@ function CreatePosisiOrganisasiBumDes() {
}} }}
/> />
</Box> </Box>
<TextInput <TextInput
label="Hierarki" label="Hierarki"
type="number" type="number"

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title, Tooltip } from '@mantine/core'; import { Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -68,16 +68,14 @@ function ListPosisiOrganisasiBumDes({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Posisi Organisasi BumDes</Title> <Title order={4}>Daftar Posisi Organisasi BumDes</Title>
<Tooltip label="Tambah Posisi Organisasi" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/create')}
onClick={() => router.push('/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>
@@ -106,19 +104,16 @@ function ListPosisiOrganisasiBumDes({ search }: { search: string }) {
<Text>{item.hierarki || '-'}</Text> <Text>{item.hierarki || '-'}</Text>
</TableTd> </TableTd>
<TableTd style={{ width: '20%' }}> <TableTd style={{ width: '20%' }}>
<Tooltip label="Edit" withArrow> <Button
<Button variant="light"
variant="light" color="green"
color="green" size="sm"
size="sm" onClick={() => router.push(`/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/${item.id}`)}
onClick={() => router.push(`/admin/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/${item.id}`)} >
> <IconEdit size={18} />
<IconEdit size={18} /> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
<TableTd style={{ width: '20%' }}> <TableTd style={{ width: '20%' }}>
<Tooltip label="Hapus" withArrow>
<Button <Button
variant="light" variant="light"
color="red" color="red"
@@ -130,7 +125,6 @@ function ListPosisiOrganisasiBumDes({ search }: { search: string }) {
> >
<IconTrash size={18} /> <IconTrash size={18} />
</Button> </Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import { Box, Center, Image, Loader, Paper, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Center, Image, Loader, Paper, Stack, Text } from '@mantine/core';
import { IconUsers } from '@tabler/icons-react'; import { IconUsers } from '@tabler/icons-react';
import { OrganizationChart } from 'primereact/organizationchart'; import { OrganizationChart } from 'primereact/organizationchart';
import { useEffect } from 'react'; import { useEffect } from 'react';
@@ -110,20 +110,18 @@ function nodeTemplate(node: any) {
return ( return (
<Stack align="center" gap={6} p="sm" style={{ minWidth: 160 }}> <Stack align="center" gap={6} p="sm" style={{ minWidth: 160 }}>
<Tooltip label={name} position="top" withArrow> <Image
<Image src={imageSrc}
src={imageSrc} alt={name}
alt={name} radius="xl"
radius="xl" w={100}
w={100} h={100}
h={100} fit="cover"
fit="cover" style={{
style={{ border: '1px solid #D3D1D1FF',
border: '1px solid #D3D1D1FF', }}
}} loading='lazy'
loading='lazy' />
/>
</Tooltip>
<Text fw={600} ta="center" size="sm">{name}</Text> <Text fw={600} ta="center" size="sm">{name}</Text>
<Text size="xs" c="dimmed" ta="center">{status}</Text> <Text size="xs" c="dimmed" ta="center">{status}</Text>
</Stack> </Stack>

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Flex, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Flex, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -67,21 +67,19 @@ function DetailAjukanIdeInofativDesa() {
Detail Ajukan Ide Inovatif Desa Detail Ajukan Ide Inovatif Desa
</Text> </Text>
<Tooltip label="Hapus Ide Inovatif" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={state.delete.loading}
disabled={state.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
</Flex> </Flex>
{/* Detail Data */} {/* Detail Data */}
@@ -104,7 +102,7 @@ function DetailAjukanIdeInofativDesa() {
<Box> <Box>
<Text fz="lg" fw="bold">Deskripsi</Text> <Text fz="lg" fw="bold">Deskripsi</Text>
<Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} /> <Text fz="md" c="dimmed" style={{ wordBreak: "break-word", whiteSpace: "normal" }} dangerouslySetInnerHTML={{ __html: data?.deskripsi || '-' }} />
</Box> </Box>
<Box> <Box>

View File

@@ -13,8 +13,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -87,11 +86,9 @@ function EditDigitalSmartVillage() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Desa Digital Smart Village Edit Desa Digital Smart Village
</Title> </Title>

View File

@@ -8,8 +8,7 @@ import {
Paper, Paper,
Skeleton, Skeleton,
Stack, Stack,
Text, Text
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
@@ -112,32 +111,28 @@ function DetailDesaDigital() {
{/* Tombol Aksi */} {/* Tombol Aksi */}
<Group gap="sm"> <Group gap="sm">
<Tooltip label="Hapus Data" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Data" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/inovasi/desa-digital-smart-village/${data.id}/edit`)}
onClick={() => router.push(`/admin/inovasi/desa-digital-smart-village/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -9,18 +9,17 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
import ExifOrientationImg from 'react-exif-orientation-img';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import CreateEditor from '../../../_com/createEditor'; import CreateEditor from '../../../_com/createEditor';
import desaDigitalState from '../../../_state/inovasi/desa-digital'; import desaDigitalState from '../../../_state/inovasi/desa-digital';
import { Dropzone } from '@mantine/dropzone';
import ExifOrientationImg from 'react-exif-orientation-img';
export default function CreateDesaDigital() { export default function CreateDesaDigital() {
const stateDesaDigital = useProxy(desaDigitalState); const stateDesaDigital = useProxy(desaDigitalState);
@@ -71,17 +70,15 @@ export default function CreateDesaDigital() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol kembali */} {/* Header dengan tombol kembali */}
<Group mb="md" align="center"> <Group mb="md" align="center">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" style={{ transition: 'background 0.2s ease' }}
style={{ transition: 'background 0.2s ease' }} >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Desa Digital Smart Village Tambah Desa Digital Smart Village
</Title> </Title>
@@ -174,15 +171,15 @@ export default function CreateDesaDigital() {
}} }}
> >
<ExifOrientationImg <ExifOrientationImg
src={previewImage} src={previewImage}
alt="Preview" alt="Preview"
style={{ style={{
maxHeight: 220, maxHeight: 220,
objectFit: 'cover', objectFit: 'cover',
border: '1px solid #e0e0e0', border: '1px solid #e0e0e0',
borderRadius: 12, borderRadius: 12,
}} }}
/> />
</Box> </Box>
)} )}
</Box> </Box>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -68,18 +67,16 @@ function ListDesaDigitalSmartVillage({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>List Desa Digital Smart Village</Title> <Title order={4}>List Desa Digital Smart Village</Title>
<Tooltip label="Tambah Inovasi" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/inovasi/desa-digital-smart-village/create')
router.push('/admin/inovasi/desa-digital-smart-village/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -13,8 +13,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -100,11 +99,9 @@ function EditInfoTeknologiTepatGuna() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Tombol back + title */} {/* Tombol back + title */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Info Teknologi Tepat Guna Edit Info Teknologi Tepat Guna
</Title> </Title>

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -101,35 +101,31 @@ function DetailInfoTeknologiTepatGuna() {
{/* Action Buttons */} {/* Action Buttons */}
<Group gap="sm" mt={10}> <Group gap="sm" mt={10}>
<Tooltip label="Hapus Info Teknologi" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={stateInfoTekno.delete.loading}
disabled={stateInfoTekno.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Info Teknologi" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() =>
onClick={() => router.push(`/admin/inovasi/info-teknologi-tepat-guna/${data.id}/edit`)
router.push(`/admin/inovasi/info-teknologi-tepat-guna/${data.id}/edit`) }
} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -10,9 +10,9 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
@@ -20,7 +20,6 @@ import { toast } from 'react-toastify';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import CreateEditor from '../../../_com/createEditor'; import CreateEditor from '../../../_com/createEditor';
import infoTeknoState from '../../../_state/inovasi/info-tekno'; import infoTeknoState from '../../../_state/inovasi/info-tekno';
import { Dropzone } from '@mantine/dropzone';
function CreateInfoTeknologiTepatGuna() { function CreateInfoTeknologiTepatGuna() {
const stateInfoTekno = useProxy(infoTeknoState); const stateInfoTekno = useProxy(infoTeknoState);
@@ -72,11 +71,9 @@ function CreateInfoTeknologiTepatGuna() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Info Teknologi Tepat Guna Tambah Info Teknologi Tepat Guna
</Title> </Title>

View File

@@ -4,6 +4,7 @@ import {
Box, Box,
Button, Button,
Center, Center,
Group,
Pagination, Pagination,
Paper, Paper,
Skeleton, Skeleton,
@@ -15,9 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Group,
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -68,18 +67,16 @@ function ListInfoTeknologiTepatGuna({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Info Teknologi Tepat Guna</Title> <Title order={4}>Daftar Info Teknologi Tepat Guna</Title>
<Tooltip label="Tambah Info Teknologi" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push('/admin/inovasi/info-teknologi-tepat-guna/create')
router.push('/admin/inovasi/info-teknologi-tepat-guna/create') }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -1,10 +1,10 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title, Tooltip } from '@mantine/core'; import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core';
import { IconListDetails, IconUsers } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { IconListDetails, IconUsers } from '@tabler/icons-react';
function LayoutTabsKolaborasi({ children }: { children: React.ReactNode }) { function LayoutTabsKolaborasi({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -15,14 +15,12 @@ function LayoutTabsKolaborasi({ children }: { children: React.ReactNode }) {
label: "List Kolaborasi Inovasi", label: "List Kolaborasi Inovasi",
value: "listkolaborasiinovasi", value: "listkolaborasiinovasi",
href: "/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi", href: "/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi",
tooltip: "Lihat daftar kolaborasi inovasi",
icon: <IconListDetails size={18} stroke={1.8} />, icon: <IconListDetails size={18} stroke={1.8} />,
}, },
{ {
label: "Mitra Kolaborasi", label: "Mitra Kolaborasi",
value: "mitarakolaborasi", value: "mitarakolaborasi",
href: "/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi", href: "/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi",
tooltip: "Kelola mitra kolaborasi",
icon: <IconUsers size={18} stroke={1.8} />, icon: <IconUsers size={18} stroke={1.8} />,
} }
]; ];
@@ -73,25 +71,18 @@ function LayoutTabsKolaborasi({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: 'pop', duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -12,8 +12,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from "@mantine/core"; } from "@mantine/core";
import { IconArrowBack } from "@tabler/icons-react"; import { IconArrowBack } from "@tabler/icons-react";
import { useParams, useRouter } from "next/navigation"; import { useParams, useRouter } from "next/navigation";
@@ -89,11 +88,9 @@ function EditKolaborasiInovasi() {
return ( return (
<Box px={{ base: "sm", md: "lg" }} py="md"> <Box px={{ base: "sm", md: "lg" }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors["blue-button"]} size={24} />
<IconArrowBack color={colors["blue-button"]} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Kolaborasi Inovasi Edit Kolaborasi Inovasi
</Title> </Title>

View File

@@ -1,5 +1,5 @@
'use client' 'use client'
import { Box, Button, Group, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -96,33 +96,29 @@ function DetailKolaborasiInovasi() {
{/* Tombol aksi */} {/* Tombol aksi */}
<Group gap="sm"> <Group gap="sm">
<Tooltip label="Hapus Kolaborasi Inovasi" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={kolaborasiState.delete.loading}
disabled={kolaborasiState.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Kolaborasi Inovasi" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/${data.id}/edit`)}
onClick={() => router.push(`/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -3,7 +3,7 @@
import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor'; import CreateEditor from '@/app/admin/(dashboard)/_com/createEditor';
import kolaborasiInovasiState from '@/app/admin/(dashboard)/_state/inovasi/kolaborasi-inovasi'; import kolaborasiInovasiState from '@/app/admin/(dashboard)/_state/inovasi/kolaborasi-inovasi';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { YearPickerInput } from '@mantine/dates'; import { YearPickerInput } from '@mantine/dates';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -54,11 +54,9 @@ function CreateProgramKreatifDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Back Button */} {/* Back Button */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Kolaborasi Inovasi Tambah Kolaborasi Inovasi
</Title> </Title>

View File

@@ -17,15 +17,14 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
import HeaderSearch from '../../../_com/header';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import kolaborasiInovasiState from '../../../_state/inovasi/kolaborasi-inovasi';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import HeaderSearch from '../../../_com/header';
import kolaborasiInovasiState from '../../../_state/inovasi/kolaborasi-inovasi';
function KolaborasiInovasi() { function KolaborasiInovasi() {
const [search, setSearch] = useState(''); const [search, setSearch] = useState('');
@@ -68,16 +67,14 @@ function ListKolaborasiInovasi({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Kolaborasi Inovasi</Title> <Title order={4}>Daftar Kolaborasi Inovasi</Title>
<Tooltip label="Tambah Kolaborasi Inovasi" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() => router.push('/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/create')}
onClick={() => router.push('/admin/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/create')} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -13,8 +13,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { import {
@@ -113,11 +112,9 @@ function EditMitraKolaborasi() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Mitra Edit Mitra
</Title> </Title>

View File

@@ -11,8 +11,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { Dropzone } from '@mantine/dropzone'; import { Dropzone } from '@mantine/dropzone';
import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react';
@@ -61,11 +60,9 @@ function CreateMitraKolaborasi() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Back Button + Title */} {/* Back Button + Title */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Mitra Kolaborasi Tambah Mitra Kolaborasi
</Title> </Title>

View File

@@ -18,16 +18,15 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconEdit, IconSearch, IconX, IconPlus } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconX } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import HeaderSearch from '../../../_com/header'; import HeaderSearch from '../../../_com/header';
import mitraKolaborasi from '../../../_state/inovasi/mitra-kolaborasi';
import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
import mitraKolaborasi from '../../../_state/inovasi/mitra-kolaborasi';
function MitraKolaborasi() { function MitraKolaborasi() {
const [search, setSearch] = useState(''); const [search, setSearch] = useState('');
@@ -81,20 +80,18 @@ function ListMitraKolaborasi({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Mitra Kolaborasi</Title> <Title order={4}>Daftar Mitra Kolaborasi</Title>
<Tooltip label="Tambah Mitra Baru" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi/create'
'/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi/create' )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>
@@ -135,39 +132,35 @@ function ListMitraKolaborasi({ search }: { search: string }) {
</Box> </Box>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Hapus Mitra" withArrow> <Button
<Button size="xs"
size="xs" radius="md"
radius="md" variant="light"
variant="light" color="red"
color="red" disabled={mitraKolaborasi.delete.loading || !item}
disabled={mitraKolaborasi.delete.loading || !item} onClick={() => {
onClick={() => { setSelectedId(item.id);
setSelectedId(item.id); setModalHapus(true);
setModalHapus(true); }}
}} >
> <IconX size={16} />
<IconX size={16} /> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
<TableTd> <TableTd>
<Tooltip label="Edit Mitra" withArrow> <Button
<Button size="xs"
size="xs" radius="md"
radius="md" variant="light"
variant="light" color="green"
color="green" disabled={!item}
disabled={!item} onClick={() =>
onClick={() => router.push(
router.push( `/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi/${item.id}`
`/admin/inovasi/kolaborasi-inovasi/mitra-kolaborasi/${item.id}` )
) }
} >
> <IconEdit size={16} />
<IconEdit size={16} /> </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -8,17 +8,16 @@ import {
TabsList, TabsList,
TabsPanel, TabsPanel,
TabsTab, TabsTab,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react';
import { import {
IconAlertCircle,
IconFileText, IconFileText,
IconListDetails, IconListDetails,
IconMessage, IconMessage
IconAlertCircle
} from '@tabler/icons-react'; } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react';
function LayoutTabsLayananOnlineDesa({ children }: { children: React.ReactNode }) { function LayoutTabsLayananOnlineDesa({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -30,29 +29,25 @@ function LayoutTabsLayananOnlineDesa({ children }: { children: React.ReactNode }
label: "Administrasi Online", label: "Administrasi Online",
value: "administrasionline", value: "administrasionline",
href: "/admin/inovasi/layanan-online-desa/administrasi-online", href: "/admin/inovasi/layanan-online-desa/administrasi-online",
icon: <IconFileText size={18} stroke={1.8} />, icon: <IconFileText size={18} stroke={1.8} />
tooltip: "Kelola administrasi online desa"
}, },
{ {
label: "Jenis Layanan", label: "Jenis Layanan",
value: "jenislayanan", value: "jenislayanan",
href: "/admin/inovasi/layanan-online-desa/jenis-layanan", href: "/admin/inovasi/layanan-online-desa/jenis-layanan",
icon: <IconListDetails size={18} stroke={1.8} />, icon: <IconListDetails size={18} stroke={1.8} />
tooltip: "Daftar jenis layanan desa"
}, },
{ {
label: "Pengaduan Masyarakat", label: "Pengaduan Masyarakat",
value: "pengaduanmasyarakat", value: "pengaduanmasyarakat",
href: "/admin/inovasi/layanan-online-desa/pengaduan-masyarakat", href: "/admin/inovasi/layanan-online-desa/pengaduan-masyarakat",
icon: <IconMessage size={18} stroke={1.8} />, icon: <IconMessage size={18} stroke={1.8} />
tooltip: "Laporan pengaduan masyarakat"
}, },
{ {
label: "Jenis Pengaduan", label: "Jenis Pengaduan",
value: "jenispengaduan", value: "jenispengaduan",
href: "/admin/inovasi/layanan-online-desa/jenis-pengaduan", href: "/admin/inovasi/layanan-online-desa/jenis-pengaduan",
icon: <IconAlertCircle size={18} stroke={1.8} />, icon: <IconAlertCircle size={18} stroke={1.8} />
tooltip: "Kategori/jenis pengaduan masyarakat"
} }
]; ];
@@ -103,25 +98,18 @@ function LayoutTabsLayananOnlineDesa({ children }: { children: React.ReactNode }
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: 'pop', duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { Box, Button, Group, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -53,20 +53,18 @@ function DetailAdministrasiOnline() {
Kembali Kembali
</Button> </Button>
<Tooltip label="Hapus Data" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
{/* Konten Detail */} {/* Konten Detail */}
<Paper <Paper

View File

@@ -11,8 +11,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -72,16 +71,14 @@ function EditJenisLayanan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jenis Layanan Edit Jenis Layanan
</Title> </Title>

View File

@@ -2,7 +2,7 @@
import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus';
import layananonlineDesa from '@/app/admin/(dashboard)/_state/inovasi/layanan-online-desa'; import layananonlineDesa from '@/app/admin/(dashboard)/_state/inovasi/layanan-online-desa';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -85,33 +85,29 @@ function DetailJenisLayanan() {
{/* Tombol aksi */} {/* Tombol aksi */}
<Group gap="sm" mt="sm"> <Group gap="sm" mt="sm">
<Tooltip label="Hapus Jenis Layanan" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id)
setSelectedId(data.id) setModalHapus(true)
setModalHapus(true) }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={state.delete.loading}
disabled={state.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Jenis Layanan" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/inovasi/layanan-online-desa/jenis-layanan/${data.id}/edit`)}
onClick={() => router.push(`/admin/inovasi/layanan-online-desa/jenis-layanan/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -10,8 +10,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -43,16 +42,14 @@ function CreateJenisLayanan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header dengan tombol back */} {/* Header dengan tombol back */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jenis Layanan Tambah Jenis Layanan
</Title> </Title>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconPlus, IconSearch } from '@tabler/icons-react';
@@ -68,20 +67,18 @@ function ListJenisLayanan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Jenis Layanan</Title> <Title order={4}>Daftar Jenis Layanan</Title>
<Tooltip label="Tambah Jenis Layanan" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/inovasi/layanan-online-desa/jenis-layanan/create'
'/admin/inovasi/layanan-online-desa/jenis-layanan/create' )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -9,8 +9,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -90,16 +89,14 @@ function EditJenisPengaduan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Jenis Pengaduan Edit Jenis Pengaduan
</Title> </Title>

View File

@@ -9,8 +9,7 @@ import {
Paper, Paper,
Stack, Stack,
TextInput, TextInput,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -41,11 +40,9 @@ function CreateJenisPengaduan() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Jenis Pengaduan Tambah Jenis Pengaduan
</Title> </Title>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react'; import { IconEdit, IconPlus, IconSearch, IconTrash } from '@tabler/icons-react';
@@ -79,20 +78,18 @@ function ListJenisPengaduan({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Jenis Pengaduan</Title> <Title order={4}>Daftar Jenis Pengaduan</Title>
<Tooltip label="Tambah Jenis Pengaduan" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/inovasi/layanan-online-desa/jenis-pengaduan/create'
'/admin/inovasi/layanan-online-desa/jenis-pengaduan/create' )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>

View File

@@ -1,10 +1,10 @@
'use client' 'use client'
import { useProxy } from 'valtio/utils'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useState } from 'react'; import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus'; import { ModalKonfirmasiHapus } from '@/app/admin/(dashboard)/_com/modalKonfirmasiHapus';
import layananonlineDesa from '@/app/admin/(dashboard)/_state/inovasi/layanan-online-desa'; import layananonlineDesa from '@/app/admin/(dashboard)/_state/inovasi/layanan-online-desa';
@@ -129,21 +129,19 @@ function DetailPengaduanMasyarakat() {
{/* Action Button */} {/* Action Button */}
<Group gap="sm"> <Group gap="sm">
<Tooltip label="Hapus Pengaduan" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" disabled={pengaduanState.pengaduanMasyarakat.delete.loading}
disabled={pengaduanState.pengaduanMasyarakat.delete.loading} >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -16,8 +16,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconDeviceImac, IconSearch } from '@tabler/icons-react'; import { IconDeviceImac, IconSearch } from '@tabler/icons-react';
@@ -99,18 +98,16 @@ function ListPengaduanMasyarakat({ search }: { search: string }) {
<Text fz="sm" c="dimmed" truncate lineClamp={1}>{item.nomorTelepon}</Text> <Text fz="sm" c="dimmed" truncate lineClamp={1}>{item.nomorTelepon}</Text>
</TableTd> </TableTd>
<TableTd style={{ width: '15%' }}> <TableTd style={{ width: '15%' }}>
<Tooltip label="Lihat detail pengaduan" withArrow> <Button
<Button size="xs"
size="xs" radius="md"
radius="md" variant="light"
variant="light" color="blue"
color="blue" leftSection={<IconDeviceImac size={16} />}
leftSection={<IconDeviceImac size={16} />} onClick={() => router.push(`/admin/inovasi/layanan-online-desa/pengaduan-masyarakat/${item.id}`)}
onClick={() => router.push(`/admin/inovasi/layanan-online-desa/pengaduan-masyarakat/${item.id}`)} >
> Detail
Detail </Button>
</Button>
</Tooltip>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Flex, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Flex, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -95,40 +95,36 @@ function DetailProgramKreatifDesa() {
</Box> </Box>
<Flex gap="sm" mt={10}> <Flex gap="sm" mt={10}>
<Tooltip label="Hapus Program Kreatif Desa" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { if (data) {
if (data) { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }
} }}
}} disabled={stateProgramKreatif.delete.loading || !data}
disabled={stateProgramKreatif.delete.loading || !data} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Program Kreatif Desa" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => {
onClick={() => { if (data) {
if (data) { router.push(`/admin/inovasi/program-kreatif-desa/${data.id}/edit`);
router.push(`/admin/inovasi/program-kreatif-desa/${data.id}/edit`); }
} }}
}} disabled={!data}
disabled={!data} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Flex> </Flex>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -8,15 +8,14 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { useProxy } from 'valtio/utils'; import { useProxy } from 'valtio/utils';
import CreateEditor from '../../../_com/createEditor'; import CreateEditor from '../../../_com/createEditor';
import programKreatifState from '../../../_state/inovasi/program-kreatif';
import SelectIconProgram from '../../../_com/selectIcon'; import SelectIconProgram from '../../../_com/selectIcon';
import programKreatifState from '../../../_state/inovasi/program-kreatif';
function CreateProgramKreatifDesa() { function CreateProgramKreatifDesa() {
const stateCreate = useProxy(programKreatifState); const stateCreate = useProxy(programKreatifState);
@@ -33,23 +32,21 @@ function CreateProgramKreatifDesa() {
const handleSubmit = async () => { const handleSubmit = async () => {
const success = await stateCreate.create.create(); const success = await stateCreate.create.create();
if (success) { if (success) {
resetForm(); resetForm();
router.push("/admin/inovasi/program-kreatif-desa"); router.push("/admin/inovasi/program-kreatif-desa");
} }
}; };
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Tombol kembali */} {/* Tombol kembali */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Program Kreatif Desa Tambah Program Kreatif Desa
</Title> </Title>

View File

@@ -18,8 +18,7 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { import {
IconCash, IconCash,
@@ -117,20 +116,18 @@ function ListProgramKreatifDesa({ search }: { search: string }) {
<Stack> <Stack>
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Program Kreatif Desa</Title> <Title order={4}>Daftar Program Kreatif Desa</Title>
<Tooltip label="Tambah Program Kreatif Desa" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/inovasi/program-kreatif-desa/create'
'/admin/inovasi/program-kreatif-desa/create' )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Table highlightOnHover striped> <Table highlightOnHover striped>
<TableThead> <TableThead>
@@ -164,20 +161,18 @@ function ListProgramKreatifDesa({ search }: { search: string }) {
> >
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Program Kreatif Desa</Title> <Title order={4}>Daftar Program Kreatif Desa</Title>
<Tooltip label="Tambah Program Kreatif Desa" withArrow> <Button
<Button leftSection={<IconPlus size={18} />}
leftSection={<IconPlus size={18} />} color="blue"
color="blue" variant="light"
variant="light" onClick={() =>
onClick={() => router.push(
router.push( '/admin/inovasi/program-kreatif-desa/create'
'/admin/inovasi/program-kreatif-desa/create' )
) }
} >
> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowY: 'auto' }}> <Box style={{ overflowY: 'auto' }}>
<Table highlightOnHover striped > <Table highlightOnHover striped >

View File

@@ -221,7 +221,7 @@ function CreateAPBDes() {
/> />
<TextInput <TextInput
label="Jumlah Anggaran" label="Jumlah Anggaran"
placeholder="Masukkan jumlah anggaran" placeholder="14 M / 1 T / 200 JT / 900 RB"
defaultValue={stateAPBDes.create.form.jumlah || ''} defaultValue={stateAPBDes.create.form.jumlah || ''}
onChange={(e) => (stateAPBDes.create.form.jumlah = e.target.value)} onChange={(e) => (stateAPBDes.create.form.jumlah = e.target.value)}
required required

View File

@@ -57,57 +57,60 @@ function ListAPBDes({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md"> <Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar APBDes</Title> <Title order={4}>Daftar APBDes</Title>
<Button <Button
leftSection={<IconPlus size={18} />} leftSection={<IconPlus size={18} />}
color="blue" color="blue"
variant="light" variant="light"
onClick={() => router.push('/admin/landing-page/apbdes/create')} onClick={() => router.push('/admin/landing-page/apbdes/create')}
> >
Tambah Baru Tambah Baru
</Button> </Button>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>
<TableThead> <TableThead>
<TableTr> <TableTr>
<TableTh style={{ width: '30%' }}>Nama APBDes</TableTh> <TableTh style={{ width: '30%'}}>Nama APBDes</TableTh>
<TableTh style={{ width: '25%' }}>Jumlah</TableTh> <TableTh style={{ width: '30%' }}>Jumlah</TableTh>
<TableTh style={{ width: '25%' }}>Dokumen</TableTh> <TableTh style={{ width: '25%' }}>Dokumen</TableTh>
<TableTh style={{ width: '20%' }}>Aksi</TableTh> <TableTh style={{ width: '25%' }}>Aksi</TableTh>
</TableTr> </TableTr>
</TableThead> </TableThead>
<TableTbody> <TableTbody>
{filteredData.length > 0 ? ( {filteredData.length > 0 ? (
filteredData.map((item) => ( filteredData.map((item) => (
<TableTr key={item.id}> <TableTr key={item.id}>
<TableTd> <TableTd style={{ width: '30%' }}>
<Text fw={500} truncate="end">{item.name}</Text> <Text fw={500} truncate="end">{item.name}</Text>
</TableTd> </TableTd>
<TableTd> <TableTd style={{ width: '30%' }}>
<Box w={150}> <Box w={150}>
<Text>Rp. {item.jumlah}</Text> <Text>Rp. {item.jumlah}</Text>
</Box> </Box>
</TableTd> </TableTd>
<TableTd> <TableTd style={{ width: '25%' }}>
{item.file?.link ? ( <Box w={150}>
<Button {item.file?.link ? (
component="a" <Button
href={item.file.link} component="a"
target="_blank" href={item.file.link}
rel="noopener noreferrer" target="_blank"
variant="light" rel="noopener noreferrer"
leftSection={<IconFile size={18} />} variant="light"
size="sm" leftSection={<IconFile size={18} />}
> size="sm"
Lihat Dokumen >
</Button> Lihat Dokumen
) : ( </Button>
<Text c="dimmed" fz="sm">Tidak ada dokumen</Text> ) : (
)} <Text c="dimmed" fz="sm">Tidak ada dokumen</Text>
)}
</Box>
</TableTd> </TableTd>
<TableTd> <TableTd style={{ width: '25%' }}>
<Button <Box w={80}>
<Button
size="xs" size="xs"
radius="md" radius="md"
variant="light" variant="light"
@@ -118,6 +121,7 @@ function ListAPBDes({ search }: { search: string }) {
> >
Detail Detail
</Button> </Button>
</Box>
</TableTd> </TableTd>
</TableTr> </TableTr>
)) ))
@@ -134,7 +138,7 @@ function ListAPBDes({ search }: { search: string }) {
</Table> </Table>
</Box> </Box>
</Paper> </Paper>
<Center mt="md"> <Center mt="md">
<Pagination <Pagination
value={page} value={page}

View File

@@ -12,8 +12,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
@@ -107,11 +106,9 @@ export default function EditDataLingkunganDesa() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" onClick={() => router.back()} p="xs" radius="md">
<Button variant="subtle" onClick={() => router.back()} p="xs" radius="md"> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Data Lingkungan Desa Edit Data Lingkungan Desa
</Title> </Title>

View File

@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks'; import { useShallowEffect } from '@mantine/hooks';
import { import {
IconArrowBack, IconArrowBack,
@@ -136,32 +136,28 @@ function DetailDataLingkunganDesa() {
{/* Action Buttons */} {/* Action Buttons */}
<Group gap="sm" mt="sm"> <Group gap="sm" mt="sm">
<Tooltip label="Hapus Data Lingkungan Desa" withArrow position="top"> <Button
<Button color="red"
color="red" onClick={() => {
onClick={() => { setSelectedId(data.id);
setSelectedId(data.id); setModalHapus(true);
setModalHapus(true); }}
}} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconTrash size={20} />
<IconTrash size={20} /> </Button>
</Button>
</Tooltip>
<Tooltip label="Edit Data Lingkungan Desa" withArrow position="top"> <Button
<Button color="green"
color="green" onClick={() => router.push(`/admin/lingkungan/data-lingkungan-desa/${data.id}/edit`)}
onClick={() => router.push(`/admin/lingkungan/data-lingkungan-desa/${data.id}/edit`)} variant="light"
variant="light" radius="md"
radius="md" size="md"
size="md" >
> <IconEdit size={20} />
<IconEdit size={20} /> </Button>
</Button>
</Tooltip>
</Group> </Group>
</Stack> </Stack>
</Paper> </Paper>

View File

@@ -8,8 +8,7 @@ import {
Stack, Stack,
Text, Text,
TextInput, TextInput,
Title, Title
Tooltip,
} from '@mantine/core'; } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
@@ -41,16 +40,14 @@ function CreateDataLingkunganDesa() {
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
{/* Header */} {/* Header */}
<Group mb="md"> <Group mb="md">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button
<Button variant="subtle"
variant="subtle" onClick={() => router.back()}
onClick={() => router.back()} p="xs"
p="xs" radius="md"
radius="md" >
> <IconArrowBack color={colors['blue-button']} size={22} />
<IconArrowBack color={colors['blue-button']} size={22} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Tambah Data Lingkungan Desa Tambah Data Lingkungan Desa
</Title> </Title>

View File

@@ -5,8 +5,7 @@ import colors from '@/con/colors';
import { import {
Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack, Box, Button, Center, Group, Pagination, Paper, Skeleton, Stack,
Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text,
Title, Title
Tooltip
} from '@mantine/core'; } from '@mantine/core';
import { import {
IconChartLine, IconChristmasTreeFilled, IconClipboardTextFilled, IconChartLine, IconChristmasTreeFilled, IconClipboardTextFilled,
@@ -83,11 +82,9 @@ function ListDataLingkunganDesa({ search }: { search: string }) {
<Stack> <Stack>
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Data Lingkungan Desa</Title> <Title order={4}>Daftar Data Lingkungan Desa</Title>
<Tooltip label="Tambah Data Lingkungan Desa" withArrow> <Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/lingkungan/data-lingkungan-desa/create')}>
<Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/lingkungan/data-lingkungan-desa/create')}> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Table highlightOnHover> <Table highlightOnHover>
<TableThead> <TableThead>
@@ -114,11 +111,9 @@ function ListDataLingkunganDesa({ search }: { search: string }) {
<Paper withBorder shadow="md" radius="md" bg={colors['white-1']} p="lg"> <Paper withBorder shadow="md" radius="md" bg={colors['white-1']} p="lg">
<Group justify="space-between" mb="md"> <Group justify="space-between" mb="md">
<Title order={4}>Daftar Data Lingkungan Desa</Title> <Title order={4}>Daftar Data Lingkungan Desa</Title>
<Tooltip label="Tambah Data Lingkungan Desa" withArrow> <Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/lingkungan/data-lingkungan-desa/create')}>
<Button leftSection={<IconPlus size={18} />} color="blue" variant="light" onClick={() => router.push('/admin/lingkungan/data-lingkungan-desa/create')}> Tambah Baru
Tambah Baru </Button>
</Button>
</Tooltip>
</Group> </Group>
<Box style={{ overflowX: 'auto' }}> <Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover> <Table highlightOnHover>

View File

@@ -1,7 +1,7 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title, Tooltip } from '@mantine/core'; import { Box, ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core';
import { IconBook, IconLeaf, IconSchool } from '@tabler/icons-react'; import { IconBook, IconLeaf, IconSchool } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
@@ -15,21 +15,18 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
label: "Tujuan Edukasi Lingkungan", label: "Tujuan Edukasi Lingkungan",
value: "tujuanedukasilingkungan", value: "tujuanedukasilingkungan",
href: "/admin/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan", href: "/admin/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan",
tooltip: "Lihat tujuan edukasi lingkungan",
icon: <IconLeaf size={18} stroke={1.8} /> icon: <IconLeaf size={18} stroke={1.8} />
}, },
{ {
label: "Materi Edukasi Yang Diberikan", label: "Materi Edukasi Yang Diberikan",
value: "materiedukasiyangdiberikan", value: "materiedukasiyangdiberikan",
href: "/admin/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan", href: "/admin/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan",
tooltip: "Kelola materi edukasi yang diberikan",
icon: <IconBook size={18} stroke={1.8} /> icon: <IconBook size={18} stroke={1.8} />
}, },
{ {
label: "Contoh Kegiatan Di Desa Darmasaba", label: "Contoh Kegiatan Di Desa Darmasaba",
value: "contohkegiatan", value: "contohkegiatan",
href: "/admin/lingkungan/edukasi-lingkungan/contoh-kegiatan-desa-darmasaba", href: "/admin/lingkungan/edukasi-lingkungan/contoh-kegiatan-desa-darmasaba",
tooltip: "Lihat contoh kegiatan desa Darmasaba",
icon: <IconSchool size={18} stroke={1.8} /> icon: <IconSchool size={18} stroke={1.8} />
}, },
]; ];
@@ -76,27 +73,26 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip key={i} label={tab.tooltip} position="bottom" withArrow transitionProps={{ transition: 'pop', duration: 200 }}> <TabsTab
<TabsTab key={i}
value={tab.value} value={tab.value}
leftSection={tab.icon} leftSection={tab.icon}
style={{ style={{
fontWeight: 600, fontWeight: 600,
fontSize: "0.9rem", fontSize: "0.9rem",
whiteSpace: "nowrap", whiteSpace: "nowrap",
transition: "all 0.2s ease", transition: "all 0.2s ease",
}} }}
> >
<span style={{ <span style={{
display: "inline-block", display: "inline-block",
maxWidth: "200px", maxWidth: "200px",
overflow: "hidden", overflow: "hidden",
textOverflow: "ellipsis" textOverflow: "ellipsis"
}}> }}>
{tab.label} {tab.label}
</span> </span>
</TabsTab> </TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>
@@ -109,7 +105,7 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
</TabsPanel> </TabsPanel>
))} ))}
</Tabs> </Tabs>
</Stack> </Stack >
) )
} }

View File

@@ -1,10 +1,10 @@
/* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable react-hooks/exhaustive-deps */
'use client' 'use client'
import colors from '@/con/colors'; import colors from '@/con/colors';
import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title, Tooltip } from '@mantine/core'; import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core';
import { IconClipboardList, IconTags } from '@tabler/icons-react';
import { usePathname, useRouter } from 'next/navigation'; import { usePathname, useRouter } from 'next/navigation';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { IconClipboardList, IconTags } from '@tabler/icons-react';
function LayoutTabs({ children }: { children: React.ReactNode }) { function LayoutTabs({ children }: { children: React.ReactNode }) {
const router = useRouter(); const router = useRouter();
@@ -16,14 +16,12 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
value: "kegiatanDesa", value: "kegiatanDesa",
href: "/admin/lingkungan/gotong-royong/kegiatan-desa", href: "/admin/lingkungan/gotong-royong/kegiatan-desa",
icon: <IconClipboardList size={18} stroke={1.8} />, icon: <IconClipboardList size={18} stroke={1.8} />,
tooltip: "Lihat dan kelola kegiatan desa",
}, },
{ {
label: "Kategori Kegiatan", label: "Kategori Kegiatan",
value: "kategoriKegiatan", value: "kategoriKegiatan",
href: "/admin/lingkungan/gotong-royong/kategori-kegiatan", href: "/admin/lingkungan/gotong-royong/kategori-kegiatan",
icon: <IconTags size={18} stroke={1.8} />, icon: <IconTags size={18} stroke={1.8} />,
tooltip: "Kelola kategori kegiatan desa",
}, },
]; ];
@@ -75,25 +73,18 @@ function LayoutTabs({ children }: { children: React.ReactNode }) {
}} }}
> >
{tabs.map((tab, i) => ( {tabs.map((tab, i) => (
<Tooltip <TabsTab
key={i} key={i}
label={tab.tooltip} value={tab.value}
position="bottom" leftSection={tab.icon}
withArrow style={{
transitionProps={{ transition: 'pop', duration: 200 }} fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
> >
<TabsTab {tab.label}
value={tab.value} </TabsTab>
leftSection={tab.icon}
style={{
fontWeight: 600,
fontSize: "0.9rem",
transition: "all 0.2s ease",
}}
>
{tab.label}
</TabsTab>
</Tooltip>
))} ))}
</TabsList> </TabsList>
</ScrollArea> </ScrollArea>

View File

@@ -3,7 +3,7 @@
import gotongRoyongState from '@/app/admin/(dashboard)/_state/lingkungan/gotong-royong'; import gotongRoyongState from '@/app/admin/(dashboard)/_state/lingkungan/gotong-royong';
import colors from '@/con/colors'; import colors from '@/con/colors';
import { Box, Button, Group, Paper, Stack, Text, TextInput, Title, Tooltip } from '@mantine/core'; import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { IconArrowBack } from '@tabler/icons-react'; import { IconArrowBack } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -72,11 +72,9 @@ function EditKategoriKegiatan() {
return ( return (
<Box px={{ base: 'sm', md: 'lg' }} py="md"> <Box px={{ base: 'sm', md: 'lg' }} py="md">
<Group mb="md" align="center"> <Group mb="md" align="center">
<Tooltip label="Kembali ke halaman sebelumnya" withArrow> <Button variant="subtle" p="xs" radius="md" onClick={() => router.back()}>
<Button variant="subtle" p="xs" radius="md" onClick={() => router.back()}> <IconArrowBack color={colors['blue-button']} size={24} />
<IconArrowBack color={colors['blue-button']} size={24} /> </Button>
</Button>
</Tooltip>
<Title order={4} ml="sm" c="dark"> <Title order={4} ml="sm" c="dark">
Edit Kategori Kegiatan Edit Kategori Kegiatan
</Title> </Title>

Some files were not shown because too many files have changed in this diff Show More