From 50bc54ceca203bdcb69a1b9b15780986f1d9aa43 Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 24 Dec 2025 14:36:51 +0800 Subject: [PATCH] Fix QC Kak Inno 22 Des Fix QC Kak Ayu 22 Des Fix Tampilan Admin Menu Inovasi --- .../ekonomi/program-kemiskinan/page.tsx | 2 +- .../inovasi/ajukan-ide-inovatif/[id]/page.tsx | 4 +- .../inovasi/ajukan-ide-inovatif/page.tsx | 7 +- .../[id]/edit/page.tsx | 2 +- .../desa-digital-smart-village/[id]/page.tsx | 8 +- .../create/page.tsx | 2 +- .../desa-digital-smart-village/page.tsx | 135 ++++++++--- .../[id]/edit/page.tsx | 2 +- .../info-teknologi-tepat-guna/[id]/page.tsx | 4 +- .../info-teknologi-tepat-guna/create/page.tsx | 2 +- .../info-teknologi-tepat-guna/page.tsx | 117 ++++++++-- .../kolaborasi-inovasi/_lib/layoutTabs.tsx | 100 +++++--- .../inovasi/kolaborasi-inovasi/layout.tsx | 22 ++ .../[id]/edit/page.tsx | 2 +- .../list-kolaborasi-inovasi/[id]/page.tsx | 2 +- .../list-kolaborasi-inovasi/create/page.tsx | 2 +- .../list-kolaborasi-inovasi/page.tsx | 195 ++++++++++++---- .../mitra-kolaborasi/[id]/page.tsx | 2 +- .../mitra-kolaborasi/create/page.tsx | 2 +- .../mitra-kolaborasi/page.tsx | 191 +++++++++++++--- .../layanan-online-desa/_lib/layoutTabs.tsx | 101 +++++--- .../administrasi-online/[id]/page.tsx | 4 +- .../administrasi-online/page.tsx | 106 +++++++-- .../jenis-layanan/[id]/edit/page.tsx | 2 +- .../jenis-layanan/[id]/page.tsx | 4 +- .../jenis-layanan/create/page.tsx | 2 +- .../jenis-layanan/page.tsx | 162 ++++++++++--- .../jenis-pengaduan/[id]/page.tsx | 2 +- .../jenis-pengaduan/create/page.tsx | 2 +- .../jenis-pengaduan/page.tsx | 121 ++++++++-- .../inovasi/layanan-online-desa/layout.tsx | 21 ++ .../pengaduan-masyarakat/[id]/page.tsx | 4 +- .../pengaduan-masyarakat/page.tsx | 133 ++++++++--- .../program-kreatif-desa/[id]/edit/page.tsx | 2 +- .../program-kreatif-desa/[id]/page.tsx | 4 +- .../program-kreatif-desa/create/page.tsx | 2 +- .../inovasi/program-kreatif-desa/page.tsx | 215 +++++++++++++----- .../_lib/layoutTabs.tsx | 101 +++++--- .../pengelolaan-sampah-bank-sampah/layout.tsx | 22 ++ 39 files changed, 1417 insertions(+), 396 deletions(-) diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx index 85ea1b44..51291899 100644 --- a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx @@ -194,7 +194,7 @@ function ListProgramKemiskinan({ search }: { search: string }) { {filteredData.length > 0 ? ( filteredData.map((item) => ( - + Judul Program diff --git a/src/app/admin/(dashboard)/inovasi/ajukan-ide-inovatif/[id]/page.tsx b/src/app/admin/(dashboard)/inovasi/ajukan-ide-inovatif/[id]/page.tsx index 51a1ab7f..27d48063 100644 --- a/src/app/admin/(dashboard)/inovasi/ajukan-ide-inovatif/[id]/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/ajukan-ide-inovatif/[id]/page.tsx @@ -40,7 +40,7 @@ function DetailAjukanIdeInofativDesa() { const data = state.findUnique.data; return ( - + {/* Tombol Kembali */} - - + + {/* Desktop Table */} + +
- Nama Inovasi - - Deskripsi Singkat Inovasi + + + Nama Inovasi + + + + + Deskripsi Singkat Inovasi + + + + + Aksi + - Aksi @@ -94,21 +116,18 @@ function ListDesaDigitalSmartVillage({ search }: { search: string }) { filteredData.map((item) => ( - - - {item.name} - - + + {item.name} + - - - + @@ -129,8 +150,8 @@ function ListDesaDigitalSmartVillage({ search }: { search: string }) { ) : ( -
- +
+ Tidak ada data inovasi digital yang cocok
@@ -140,6 +161,64 @@ function ListDesaDigitalSmartVillage({ search }: { search: string }) {
+ + {/* Mobile Cards */} + + + {filteredData.length > 0 ? ( + filteredData.map((item) => ( + + + + + Nama Inovasi + + + {item.name} + + + + + Deskripsi Singkat Inovasi + + + + + + + + + + + )) + ) : ( +
+ + Tidak ada data inovasi digital yang cocok + +
+ )} +
+
+ {/* Tombol back + title */} - - + {/* Desktop Table */} + +
- Nama Info Teknologi + + Nama Info Teknologi + - Deskripsi Singkat + + Deskripsi Singkat + + + + + Aksi + - Aksi {filteredData.length > 0 ? ( filteredData.map((item) => ( - - + + {item.name} - + - +
+ + {/* Mobile Cards */} + + {filteredData.length > 0 ? ( + filteredData.map((item) => ( + + + + + Nama Info Teknologi + + + {item.name} + + + + + Deskripsi Singkat + + + + + + + + + )) + ) : ( +
+ + Tidak ada data Info Teknologi yang cocok + +
+ )} +
@@ -164,4 +239,4 @@ function ListInfoTeknologiTepatGuna({ search }: { search: string }) { ); } -export default InfoTeknologiTepatGuna; +export default InfoTeknologiTepatGuna; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/_lib/layoutTabs.tsx b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/_lib/layoutTabs.tsx index c208cdac..7ee9bba3 100644 --- a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/_lib/layoutTabs.tsx +++ b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/_lib/layoutTabs.tsx @@ -1,7 +1,7 @@ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import colors from '@/con/colors'; -import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; +import { Box, ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; import { IconListDetails, IconUsers } from '@tabler/icons-react'; import { usePathname, useRouter } from 'next/navigation'; import React, { useEffect, useState } from 'react'; @@ -57,36 +57,76 @@ function LayoutTabsKolaborasi({ children }: { children: React.ReactNode }) { keepMounted={false} > {/* ✅ Scroll horizontal wrapper biar rapi */} - - - {tabs.map((tab, i) => ( - - {tab.label} - - ))} - - + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + + + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + {tabs.map((tab, i) => ( = 5; + + if (isDetailPage) { + // Tampilkan tanpa tab menu + return ( + + {children} + + ); + } + return ( {children} diff --git a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/[id]/edit/page.tsx b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/[id]/edit/page.tsx index 531aca12..d07058ef 100644 --- a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/[id]/edit/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/list-kolaborasi-inovasi/[id]/edit/page.tsx @@ -118,7 +118,7 @@ function EditKolaborasiInovasi() { }; return ( - + - - + + {/* Desktop Table */} + +
- No - Nama Kolaborasi Inovasi - Tahun - Deskripsi Singkat - Aksi + + + No + + + + + Nama Kolaborasi Inovasi + + + + + Tahun + + + + + Deskripsi Singkat + + + + + Aksi + + {filteredData.length > 0 ? ( filteredData.map((item, index) => ( - {index + 1} - - - {item.name} + + + {index + 1} - + + {item.name} + + + + {item.tahun} - + {item.slug} - +
+ + {/* Mobile Card View */} + + + {filteredData.length > 0 ? ( + filteredData.map((item, index) => ( + + + + + No + + + {index + 1} + + + + + Nama Kolaborasi Inovasi + + + {item.name} + + + + + Tahun + + + {item.tahun} + + + + + Deskripsi Singkat + + + {item.slug} + + + + + + + + )) + ) : ( +
+ + Tidak ada data kolaborasi inovasi yang tersedia + +
+ )} +
+
-
- { - load(newPage, 10); - window.scrollTo({ top: 0, behavior: 'smooth' }); - }} - total={totalPages} - mt="md" - mb="md" - color="blue" - radius="md" - /> -
+ + {totalPages > 1 && ( +
+ { + load(newPage, 10); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }} + total={totalPages} + mt={{ base: 'sm', md: 'md' }} + mb={{ base: 'sm', md: 'md' }} + color="blue" + radius="md" + /> +
+ )}
); } -export default KolaborasiInovasi; +export default KolaborasiInovasi; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/mitra-kolaborasi/[id]/page.tsx b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/mitra-kolaborasi/[id]/page.tsx index ce4516a7..a14a850b 100644 --- a/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/mitra-kolaborasi/[id]/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/kolaborasi-inovasi/mitra-kolaborasi/[id]/page.tsx @@ -136,7 +136,7 @@ function EditMitraKolaborasi() { }; return ( - + {/* Header */} - - + + {/* Desktop Table */} + +
- No - Nama Mitra - Image - Delete - Edit + + + No + + + + + Nama Mitra + + + + + Image + + + + + Delete + + + + + Edit + + {filteredData.length > 0 ? ( filteredData.map((item, index) => ( - {index + 1} - + + {index + 1} + + + + {item.name} - + {item.image?.link ? ( ) : ( - + )} @@ -167,8 +216,8 @@ function ListMitraKolaborasi({ search }: { search: string }) { ) : ( -
- +
+ Tidak ada data mitra kolaborasi yang tersedia
@@ -178,7 +227,96 @@ function ListMitraKolaborasi({ search }: { search: string }) {
+ + {/* Mobile Card View */} + + + {filteredData.length > 0 ? ( + filteredData.map((item, index) => ( + + + + + No + + + {index + 1} + + + + + Nama Mitra + + + {item.name} + + + + + Image + + + {item.image?.link ? ( + {item.name} + ) : ( + + )} + + + + + + + + + )) + ) : ( +
+ + Tidak ada data mitra kolaborasi yang tersedia + +
+ )} +
+
+
- {/* Modal Konfirmasi Hapus */} setModalHapus(false)} @@ -205,4 +342,4 @@ function ListMitraKolaborasi({ search }: { search: string }) { ); } -export default MitraKolaborasi; +export default MitraKolaborasi; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/_lib/layoutTabs.tsx b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/_lib/layoutTabs.tsx index b12c50be..cddf9e8e 100644 --- a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/_lib/layoutTabs.tsx +++ b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/_lib/layoutTabs.tsx @@ -2,6 +2,7 @@ 'use client' import colors from '@/con/colors'; import { + Box, ScrollArea, Stack, Tabs, @@ -84,36 +85,76 @@ function LayoutTabsLayananOnlineDesa({ children }: { children: React.ReactNode } keepMounted={false} > {/* ✅ Scroll horizontal biar gak overflow */} - - - {tabs.map((tab, i) => ( - - {tab.label} - - ))} - - - + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + + + + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + {tabs.map((tab, i) => ( - + + {/* Tombol Kembali */} + + + + )) + ) : ( +
+ + Tidak ada data administrasi online yang cocok + +
+ )} + +
diff --git a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-layanan/[id]/edit/page.tsx b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-layanan/[id]/edit/page.tsx index 780a9265..189b40cb 100644 --- a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-layanan/[id]/edit/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-layanan/[id]/edit/page.tsx @@ -90,7 +90,7 @@ function EditJenisLayanan() { }; return ( - + {/* Header */} - - + + {/* Desktop Table */} + +
- Nama Jenis Layanan - Deskripsi - Aksi + + + Nama Jenis Layanan + + + + + Deskripsi + + + + + Aksi + + @@ -94,16 +123,29 @@ function ListJenisLayanan({ search }: { search: string }) { filteredData.map((item) => ( - + {item.nama} - - + + {item.deskripsi || '-'} - +
+ + {/* Mobile Cards */} + + + {filteredData.length > 0 ? ( + filteredData.map((item) => ( + + + + + Nama Jenis Layanan + + + {item.nama} + + + + + Deskripsi + + + {item.deskripsi || '-'} + + + + + + + + )) + ) : ( +
+ + Tidak ada jenis layanan yang cocok + +
+ )} +
+
-
- { - load(newPage, 10); - window.scrollTo({ top: 0, behavior: 'smooth' }); - }} - total={totalPages} - mt="md" - mb="md" - color="blue" - radius="md" - /> -
-
+ + {totalPages > 1 && ( +
+ { + load(newPage, 10); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }} + total={totalPages} + mt="md" + color="blue" + radius="md" + /> +
+ )} + ); } diff --git a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-pengaduan/[id]/page.tsx b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-pengaduan/[id]/page.tsx index 5331bc9e..a4917449 100644 --- a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-pengaduan/[id]/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/jenis-pengaduan/[id]/page.tsx @@ -105,7 +105,7 @@ function EditJenisPengaduan() { }; return ( - + {/* Header */} - - + {/* Desktop Table */} + +
- Nama Jenis Pengaduan - Edit - Hapus + + + Nama Jenis Pengaduan + + + + + Edit + + + + + Hapus + + @@ -106,7 +129,7 @@ function ListJenisPengaduan({ search }: { search: string }) { filteredData.map((item) => ( - + {item.nama} @@ -147,7 +170,7 @@ function ListJenisPengaduan({ search }: { search: string }) {
- + Tidak ada jenis pengaduan yang cocok
@@ -157,6 +180,63 @@ function ListJenisPengaduan({ search }: { search: string }) {
+ + {/* Mobile Card View */} + + + {filteredData.length > 0 ? ( + filteredData.map((item) => ( + + + + + Nama Jenis Pengaduan + + + {item.nama} + + + + + + + + + )) + ) : ( +
+ + Tidak ada jenis pengaduan yang cocok + +
+ )} +
+
@@ -167,14 +247,13 @@ function ListJenisPengaduan({ search }: { search: string }) { window.scrollTo({ top: 0, behavior: 'smooth' }); }} total={totalPages} - mt="md" - mb="md" + mt={{ base: 'sm', md: 'md' }} + mb={{ base: 'sm', md: 'md' }} color="blue" radius="md" />
- {/* Modal Hapus */} setModalHapus(false)} @@ -185,4 +264,4 @@ function ListJenisPengaduan({ search }: { search: string }) { ); } -export default JenisPengaduan; +export default JenisPengaduan; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/layout.tsx b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/layout.tsx index dcb53527..dcecdd2e 100644 --- a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/layout.tsx +++ b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/layout.tsx @@ -1,7 +1,28 @@ 'use client' +import { Box } from "@mantine/core"; import LayoutTabsLayananOnlineDesa from "./_lib/layoutTabs"; +import { usePathname } from "next/navigation"; function Layout({ children }: { children: React.ReactNode }) { + const pathname = usePathname(); + + // Contoh path: + // - /darmasaba/desa/berita/semua → panjang 5 → list + // - /darmasaba/desa/berita/Pemerintahan → panjang 5 → list + // - /darmasaba/desa/berita/Pemerintahan/123 → panjang 6 → detail + + const segments = pathname.split('/').filter(Boolean); + const isDetailPage = segments.length >= 5; + + if (isDetailPage) { + // Tampilkan tanpa tab menu + return ( + + {children} + + ); + } + return ( {children} diff --git a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/pengaduan-masyarakat/[id]/page.tsx b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/pengaduan-masyarakat/[id]/page.tsx index 9ab1109e..070d6d11 100644 --- a/src/app/admin/(dashboard)/inovasi/layanan-online-desa/pengaduan-masyarakat/[id]/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/layanan-online-desa/pengaduan-masyarakat/[id]/page.tsx @@ -41,7 +41,7 @@ function DetailPengaduanMasyarakat() { const data = pengaduanState.pengaduanMasyarakat.findUnique.data; return ( - + {/* Tombol Kembali */} + + + + )) + ) : ( +
+ + Tidak ada data pengaduan yang cocok + +
+ )} + +
+ + {/* Pagination */}
+ - - - - No - Nama Program Kreatif Desa - Deskripsi Singkat - Ikon - Detail - - -
+ + + + + + No + Nama Program Kreatif Desa + Deskripsi Singkat + Ikon + Detail + + +
+
+ Tidak ada data program kreatif desa yang tersedia @@ -150,7 +161,7 @@ function ListProgramKreatifDesa({ search }: { search: string }) { } return ( - + - - Daftar Program Kreatif Desa + + + Daftar Program Kreatif Desa + - - + + {/* Desktop Table */} + +
- No - - Nama Program Kreatif Desa + + + No + + + + + Nama Program Kreatif Desa + + + + + Deskripsi Singkat + + + + + Ikon + + + + + Detail + - Deskripsi Singkat - Ikon - Detail {filteredData.map((item, index) => ( - {index + 1} - - - {item.name} - + + {index + 1} - - - - {item.slug} - - + + + {item.name} + - + + + {item.slug} + + + {iconMap[item.icon] && ( {React.createElement(iconMap[item.icon], { size: 24 })} )} - + @@ -229,7 +267,72 @@ function ListProgramKreatifDesa({ search }: { search: string }) {
+ + {/* Mobile Cards */} + + + {filteredData.map((item, index) => ( + + + + + No + + + {index + 1} + + + + + Nama Program Kreatif Desa + + + {item.name} + + + + + Deskripsi Singkat + + + {item.slug} + + + + + Ikon + + + {iconMap[item.icon] && ( + + {React.createElement(iconMap[item.icon], { size: 24 })} + + )} + + + + + + + + ))} + +
+
@@ -248,4 +351,4 @@ function ListProgramKreatifDesa({ search }: { search: string }) { ); } -export default ProgramKreatifDesa; +export default ProgramKreatifDesa; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/_lib/layoutTabs.tsx b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/_lib/layoutTabs.tsx index dc178d22..5a1865f3 100644 --- a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/_lib/layoutTabs.tsx +++ b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/_lib/layoutTabs.tsx @@ -1,7 +1,7 @@ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import colors from '@/con/colors'; -import { ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; +import { Box, ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; import { IconRecycle, IconTrash } from '@tabler/icons-react'; import { usePathname, useRouter } from 'next/navigation'; import React, { useEffect, useState } from 'react'; @@ -58,35 +58,76 @@ function LayoutTabsPengelolaanSampahBankSampah({ children }: { children: React.R keepMounted={false} > {/* ✅ Scroll horizontal wrapper */} - - - {tabs.map((tab, i) => ( - - {tab.label} - - ))} - - + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + + + + + + + {tabs.map((tab, i) => ( + + {tab.label} + + ))} + + + {tabs.map((tab, i) => ( = 5; + + if (isDetailPage) { + // Tampilkan tanpa tab menu + return ( + + {children} + + ); + } + return ( {children}