diff --git a/src/app/admin/(dashboard)/_com/modalKonfirmasiHapus.tsx b/src/app/admin/(dashboard)/_com/modalKonfirmasiHapus.tsx new file mode 100644 index 00000000..d8805319 --- /dev/null +++ b/src/app/admin/(dashboard)/_com/modalKonfirmasiHapus.tsx @@ -0,0 +1,35 @@ +// components/modal/ModalKonfirmasiHapus.tsx +import { Modal, Text, Button, Flex } from "@mantine/core" + +interface ModalKonfirmasiHapusProps { + opened: boolean + loading?: boolean + onClose: () => void + onConfirm: () => void + text: string +} + +export function ModalKonfirmasiHapus({ + opened, + loading = false, + onClose, + onConfirm, + text, +}: ModalKonfirmasiHapusProps) { + return ( + + {text} + + + + + + ) +} diff --git a/src/app/admin/(dashboard)/desa/berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/page.tsx index af5f0801..134cd4ad 100644 --- a/src/app/admin/(dashboard)/desa/berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/page.tsx @@ -10,6 +10,7 @@ import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; +import { ModalKonfirmasiHapus } from '../../_com/modalKonfirmasiHapus'; import stateDashboardBerita from '../../_state/desa/berita'; import { BeritaEditor } from './_com/BeritaEditor'; @@ -23,99 +24,6 @@ function Page() { ); } -// function BeritaCreate() { -// const beritaState = useProxy(stateDashboardBerita); -// const [previewImage, setPreviewImage] = useState(null); -// const [file, setFile] = useState(null); -// const [editorInstance, setEditorInstance] = useState(null); - - - -// const handleSubmit = async () => { -// if (!file) { -// return toast.warn("Pilih file gambar terlebih dahulu"); -// } -// if (!editorInstance) return toast.error("Editor belum siap"); - -// const htmlContent = editorInstance.getHTML(); -// if (!htmlContent || htmlContent === '

') return toast.warn("Konten tidak boleh kosong"); - -// beritaState.berita.create.form.content = htmlContent; -// console.log(beritaState.berita.create.form) -// // Upload gambar dulu -// const res = await ApiFetch.api.fileStorage.create.post({ -// file, -// name: file.name, -// }); - -// const uploaded = res.data?.data; -// if (!uploaded?.id) { -// return toast.error("Gagal upload gambar"); -// } - -// // Simpan ID gambar ke form -// beritaState.berita.create.form.imageId = uploaded.id; - -// // Submit data berita -// await beritaState.berita.create.create(); -// }; - -// return ( -// -// -// -// { -// beritaState.berita.create.form.kategoriBeritaId = val.id; -// }} -// /> -// { -// beritaState.berita.create.form.judul = val.target.value; -// }} -// label={"Judul"} -// placeholder="masukkan judul" -// /> -// { -// beritaState.berita.create.form.deskripsi = val.target.value; -// }} -// label={"Deskripsi"} -// placeholder="masukkan deskripsi" -// /> - -// { -// if (!e) return; -// setFile(e); -// const base64 = await e.arrayBuffer().then((buf) => -// "data:image/png;base64," + Buffer.from(buf).toString("base64") -// ); -// setPreviewImage(base64); -// }} -// /> -// {previewImage ? ( -// -// ) : ( -//
-// -//
-// )} - -// setEditorInstance(ed)} -// /> - - -// -//
-//
-//
-// ); -// } - function BeritaCreate() { const beritaState = useProxy(stateDashboardBerita); const [previewImage, setPreviewImage] = useState(null); @@ -236,19 +144,96 @@ function BeritaCreate() { +// function BeritaList() { +// const beritaState = useProxy(stateDashboardBerita) +// useShallowEffect(() => { +// beritaState.berita.findMany.load() +// }, []) + + + +// const router = useRouter() + +// if (!beritaState.berita.findMany.data) return +// {Array.from({ length: 10 }).map((v, k) => )} +// +// return ( +// +// +// +// List Berita +// +// {beritaState.berita.findMany.data?.map((item) => ( +// +// +// +// beritaState.berita.delete.byId(item.id)} +// disabled={beritaState.berita.delete.loading} +// color={colors['blue-button']} variant='transparent'> +// +// +// { +// router.push("/desa/berita/edit"); +// }} color={colors['blue-button']} variant='transparent'> +// +// +// +// +// Kategori +// +// {item.kategoriBerita?.name} +// +// Judul +// +// {item.judul} +// +// Deskripsi +// +// {item.deskripsi} +// +// Gambar +// +// gambar +// +// +// ))} +// +// +// +// +// ) +// } + function BeritaList() { const beritaState = useProxy(stateDashboardBerita) + const [modalHapus, setModalHapus] = useState(false) + const [selectedId, setSelectedId] = useState(null) + useShallowEffect(() => { beritaState.berita.findMany.load() }, []) - - const router = useRouter() - if (!beritaState.berita.findMany.data) return - {Array.from({ length: 10 }).map((v, k) => )} - + const handleHapus = () => { + if (selectedId) { + beritaState.berita.delete.byId(selectedId) + setModalHapus(false) + setSelectedId(null) + } + } + + if (!beritaState.berita.findMany.data) { + return ( + + {Array.from({ length: 10 }).map((_, k) => ( + + ))} + + ) + } + return ( @@ -257,46 +242,52 @@ function BeritaList() { {beritaState.berita.findMany.data?.map((item) => ( - + beritaState.berita.delete.byId(item.id)} + onClick={() => { + setSelectedId(item.id) + setModalHapus(true) + }} disabled={beritaState.berita.delete.loading} - color={colors['blue-button']} variant='transparent'> + color={colors['blue-button']} variant='transparent' + > - { - router.push("/desa/berita/edit"); - }} color={colors['blue-button']} variant='transparent'> + router.push("/desa/berita/edit")} + color={colors['blue-button']} variant='transparent' + > - - Kategori - + Kategori {item.kategoriBerita?.name} - - Judul - + Judul {item.judul} - - Deskripsi - + Deskripsi {item.deskripsi} - - Gambar - - gambar + Gambar + gambar ))} + + {/* Modal Konfirmasi Hapus */} + setModalHapus(false)} + onConfirm={handleHapus} + text='Apakah anda yakin ingin menghapus berita ini?' + /> ) } + function SelectCategory({ onChange, }: { diff --git a/src/app/admin/(dashboard)/ekonomi/demografi-pekerjaan/page.tsx b/src/app/admin/(dashboard)/ekonomi/demografi-pekerjaan/page.tsx index 630313ea..c2a37b38 100644 --- a/src/app/admin/(dashboard)/ekonomi/demografi-pekerjaan/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/demografi-pekerjaan/page.tsx @@ -1,10 +1,46 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; import React from 'react'; function Page() { return ( -
- demografi-pekerjaan -
+ + + + + + Demografi Pekerjaan + Jumlah Pekerja Laki - Laki} + placeholder="Masukkan jumlah pekerja laki - laki" + /> + Jumlah Pekerja Perempuan} + placeholder="Masukkan jumlah pekerja perempuan" + /> + Nama Pekerjaan} + placeholder="Masukkan nama pekerjaan" + /> + + + + + + + + + + Grafik Demografi Pekerjaan + + + + + ); } diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx index cd2b60db..2b121b34 100644 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-penduduk-miskin-2024-2025/page.tsx @@ -1,10 +1,42 @@ +import { Box, Button, Group, Paper, Stack, TextInput, Title } from '@mantine/core'; +import colors from '@/con/colors'; import React from 'react'; function Page() { return ( -
- jumlah-penduduk-miskin-2024-2025 -
+ + + + + + Jumlah Penduduk Miskin 2024-2025 + + + + + + + + + + + + Grafik Jumlah Penduduk Miskin 2024-2025 + + + + + ); } diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/page.tsx index 437f9d33..3f21fdb6 100644 --- a/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/page.tsx @@ -1,11 +1,37 @@ -import React from 'react'; +import colors from '@/con/colors'; +import { Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; +import DataPengangguran from './ui/dataPengangguran/page'; +import GrafikDataPengangguran from './ui/grafikDataPengangguran/page'; +import DetailDataPengangguran from './ui/detailDataPengangguran/page'; function Page() { return ( -
- jumlah-pengangguran-2024-2025 -
- ); + + Jumlah Pengangguran 2024-2025 + + + + Data Pengangguran Desa + + + Grafik Data Pengangguran Desa + + + Detail Data Pengangguran Desa + + + + + + + + + + + + + + ) } export default Page; diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/dataPengangguran/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/dataPengangguran/page.tsx new file mode 100644 index 00000000..45d9ff2f --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/dataPengangguran/page.tsx @@ -0,0 +1,51 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, SimpleGrid, Stack, Text, TextInput, Title } from '@mantine/core'; + +function DataPengangguran() { + return ( + + + + + + + Data Pengangguran + Total Pengangguran} + placeholder="masukkan total pengangguran" + /> + Pengangguran Terdidik} + placeholder="masukkan pengangguran terdidik" + /> + Usia Produktif} + placeholder="masukkan usia produktif" + /> + Sedang Mencari Kerja} + placeholder="masukkan jumlah sedang mencari kerja" + /> + + + + + + + + + + List Data Pengangguran + + + + + + + + ); +} + +export default DataPengangguran; diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/detailDataPengangguran/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/detailDataPengangguran/page.tsx new file mode 100644 index 00000000..5da9dec4 --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/detailDataPengangguran/page.tsx @@ -0,0 +1,18 @@ +import colors from '@/con/colors'; +import { Box, Paper, Stack, Title } from '@mantine/core'; + +function DetailDataPengangguran() { + return ( + + + + + Detail Data Pengangguran + + + + + ); +} + +export default DetailDataPengangguran; diff --git a/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/grafikDataPengangguran/page.tsx b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/grafikDataPengangguran/page.tsx new file mode 100644 index 00000000..d0cf2a55 --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/jumlah-pengangguran-2024-2025/ui/grafikDataPengangguran/page.tsx @@ -0,0 +1,49 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; + +function GrafikDataPengangguran() { + return ( + + + + + + Data Pengangguran + Total Pengangguran} + placeholder="masukkan total pengangguran" + /> + Pengangguran Terdidik} + placeholder="masukkan pengangguran terdidik" + /> + Usia Produktif} + placeholder="masukkan usia produktif" + /> + Sedang Mencari Kerja} + placeholder="masukkan jumlah sedang mencari kerja" + /> + + + + + + + + + + List Data Pengangguran + + + + + + + ); +} + +export default GrafikDataPengangguran; diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx index 98679492..690a8999 100644 --- a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx @@ -1,10 +1,30 @@ -import React from 'react'; +import colors from '@/con/colors'; +import { Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; +import ProgramKemiskinan from './ui/program/page'; +import StatistikKemiskinan from './ui/statistik/page'; function Page() { return ( -
- program-kemiskinan -
+ + Program Kemiskinan + + + + Program Kemiskinan + + + Statistik Kemiskinan + + + + + + + + + + + ); } diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/program/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/program/page.tsx new file mode 100644 index 00000000..78a78521 --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/program/page.tsx @@ -0,0 +1,43 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, SimpleGrid, Stack, Text, TextInput, Title } from '@mantine/core'; +import React from 'react'; + +function ProgramKemiskinan() { + return ( + + + + + + Program Kemiskinan + Nama Program} + placeholder="Masukkan nama program" + /> + Deskripsi Program} + placeholder="Masukkan deskripsi program" + /> + + + + + + + + + + List Data Program Kemiskinan + + + + + + ); +} + +export default ProgramKemiskinan; diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/statistik/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/statistik/page.tsx new file mode 100644 index 00000000..0786257c --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/ui/statistik/page.tsx @@ -0,0 +1,43 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; +import React from 'react'; + +function StatistikKemiskinan() { + return ( + + + + + + Statistik Kemiskinan + Tahun} + placeholder="Masukkan tahun" + /> + Jumlah Penduduk Miskin} + placeholder="Masukkan jumlah penduduk miskin" + /> + + + + + + + + + + Statistik Kemiskinan + + + + + + ); +} + +export default StatistikKemiskinan; diff --git a/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/page.tsx b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/page.tsx index e4701ee1..f308290e 100644 --- a/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/page.tsx @@ -1,10 +1,31 @@ +import colors from '@/con/colors'; +import { Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; import React from 'react'; +import DataSektorUnggulan from './ui/data_sektor_unggulan/page'; +import GrafikDataSektor from './ui/grafik_data_sektor/page'; function Page() { return ( -
- sektor-unggulan-desa -
+ + Sektor Unggulan Desa + + + + Data Sektor Unggulan Desa + + + Grafik Data Sektor Unggulan Desa + + + + + + + + + + + ); } diff --git a/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/data_sektor_unggulan/page.tsx b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/data_sektor_unggulan/page.tsx new file mode 100644 index 00000000..7281ed4f --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/data_sektor_unggulan/page.tsx @@ -0,0 +1,45 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, SimpleGrid, Stack, Text, TextInput, Title } from '@mantine/core'; +import React from 'react'; + +function DataSektorUnggulan() { + return ( + + + + + + + Data Sektor Unggulan + Nama Sektor Unggulan} + placeholder="Masukkan nama sektor unggulan" + /> + Deskripsi Sektor Unggulan} + placeholder="Masukkan deskripsi sektor unggulan" + /> + + + + + + + + + + Data Sektor Unggulan + + + + + + + ); +} + +export default DataSektorUnggulan; diff --git a/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/grafik_data_sektor/page.tsx b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/grafik_data_sektor/page.tsx new file mode 100644 index 00000000..5c9985e2 --- /dev/null +++ b/src/app/admin/(dashboard)/ekonomi/sektor-unggulan-desa/ui/grafik_data_sektor/page.tsx @@ -0,0 +1,44 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; +import React from 'react'; + +function GrafikDataSektor() { + return ( + + + + + + Grafik Data Sektor Unggulan + Nama Sektor Unggulan} + placeholder="Masukkan nama sektor unggulan" + /> + Jumlah Sektor Unggulan} + placeholder="Masukkan jumlah sektor unggulan" + /> + + + + + + + + + + Grafik Sektor Unggulan + + + + + + + ); +} + +export default GrafikDataSektor; diff --git a/src/app/admin/(dashboard)/inovasi/desa-digital-smart-village/page.tsx b/src/app/admin/(dashboard)/inovasi/desa-digital-smart-village/page.tsx index d6b4e9dc..348012b2 100644 --- a/src/app/admin/(dashboard)/inovasi/desa-digital-smart-village/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/desa-digital-smart-village/page.tsx @@ -1,10 +1,49 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; +import { IconImageInPicture } from '@tabler/icons-react'; import React from 'react'; function Page() { return ( -
- desa-digital-smart-village -
+ + + + + + Create Data Desa Digital Smart Village + Nama Desa Digital Smart Village} + placeholder="Masukkan nama desa digital smart village" + /> + Deskripsi Desa Digital Smart Village} + placeholder="Masukkan deskripsi desa digital smart village" + /> + + + Upload Gambar Desa Digital Smart Village + + + + + + + + + + + + + Create Data Desa Digital Smart Village + + + + + ); } diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx index 5ece0a34..b114d94e 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx @@ -36,7 +36,6 @@ function GrafikHasilKepuasan() { Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik