Fix Table Admin Preview Desktop

Seeder Menu Kesehatan
This commit is contained in:
2026-01-13 11:45:55 +08:00
parent 903dc74cca
commit 184854d273
115 changed files with 1508 additions and 695 deletions

View File

@@ -926,5 +926,194 @@
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/TDQReg1lQ73s39crXW0ra-desktop.webp",
"category": "image"
},
{
"id": "cmkao2zm90007vntzxqkjy5mt",
"name": "d6hJgycQawWN3VEcHaqtR-desktop.webp",
"realName": "puskesmas.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/d6hJgycQawWN3VEcHaqtR-desktop.webp",
"category": "image"
},
{
"id": "cmkatoru10000vny38y0wxd6s",
"name": "cg78Sb_QzZFlli9s2FPVc-desktop.webp",
"realName": "puskesmas2.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/cg78Sb_QzZFlli9s2FPVc-desktop.webp",
"category": "image"
},
{
"id": "cmkay1e590010vn6y24pgaa1r",
"name": "hLeF0GRFZqDUngZnDMAAk-desktop.webp",
"realName": "pk1.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/hLeF0GRFZqDUngZnDMAAk-desktop.webp",
"category": "image"
},
{
"id": "cmkay6hob0011vn6ybjwejcej",
"name": "hyyTFi8EApjzFEZ9EvJgB-desktop.webp",
"realName": "pk2.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/hyyTFi8EApjzFEZ9EvJgB-desktop.webp",
"category": "image"
},
{
"id": "cmkay8vmd0012vn6ylsk2vzfo",
"name": "l4qsUEw2JiclGAkkrXp9g-desktop.webp",
"realName": "pk3.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/l4qsUEw2JiclGAkkrXp9g-desktop.webp",
"category": "image"
},
{
"id": "cmkayd8o90013vn6ye7n8805q",
"name": "Gc79mlIlGuoRQuTqskFj--desktop.webp",
"realName": "pk-4.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/Gc79mlIlGuoRQuTqskFj--desktop.webp",
"category": "image"
},
{
"id": "cmkayi0x90016vn6ykddxqyq3",
"name": "OsMY3AYPyGC_CoN1xUjOn-desktop.webp",
"realName": "posyandu1.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/OsMY3AYPyGC_CoN1xUjOn-desktop.webp",
"category": "image"
},
{
"id": "cmkaykipf0019vn6yknjno3k1",
"name": "M9QlgVKIEfCdY3g4F_tRZ-desktop.webp",
"realName": "pk6.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/M9QlgVKIEfCdY3g4F_tRZ-desktop.webp",
"category": "image"
},
{
"id": "cmkayz2h8001cvn6yrb7uptjs",
"name": "Gi8EX3pBmT719AfzXirDS-desktop.webp",
"realName": "pd1.jpg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/Gi8EX3pBmT719AfzXirDS-desktop.webp",
"category": "image"
},
{
"id": "cmkawq38m0009vn6yi7evbhap",
"name": "v7Ac2xQvTiJy-HYh1AxF4-desktop.webp",
"realName": "posko-siaga.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/v7Ac2xQvTiJy-HYh1AxF4-desktop.webp",
"category": "image"
},
{
"id": "cmkawso29000cvn6y879ahra0",
"name": "jYxEXspWH5g6eTTVqK72c-desktop.webp",
"realName": "ambulance.jpg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/jYxEXspWH5g6eTTVqK72c-desktop.webp",
"category": "image"
},
{
"id": "cmkawu7qj000fvn6yubhimyiv",
"name": "3tNQ9J8I3Ewq5H8CWuqvp-desktop.webp",
"realName": "penanganan darurat.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/3tNQ9J8I3Ewq5H8CWuqvp-desktop.webp",
"category": "image"
},
{
"id": "cmkb6488i001fvn6ylkddch1j",
"name": "g4ICsRrmOaIqS_yqlQLZK-desktop.webp",
"realName": "puskesmas2.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/g4ICsRrmOaIqS_yqlQLZK-desktop.webp",
"category": "image"
},
{
"id": "cmkb681og001gvn6ykb5uasln",
"name": "1NkzPzQailqE5yNOiUjB9-desktop.webp",
"realName": "puskesmas.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/1NkzPzQailqE5yNOiUjB9-desktop.webp",
"category": "image"
},
{
"id": "cmkb6brrf0000vn14u8c7wnox",
"name": "NBPAqjPXn7GQmYTDBI5hu-desktop.webp",
"realName": "kd3.webp",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/NBPAqjPXn7GQmYTDBI5hu-desktop.webp",
"category": "image"
},
{
"id": "cmkb6ehpi0001vn14hjp4tdye",
"name": "EcQIGOF6LW1dIKE53vmba-desktop.webp",
"realName": "kd4.jpeg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/EcQIGOF6LW1dIKE53vmba-desktop.webp",
"category": "image"
},
{
"id": "cmkbynxxo0000vn67wi2nsyl3",
"name": "pps1ZgzJxDb4VZxEvtZeu-desktop.webp",
"realName": "infowp-1.jpg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/pps1ZgzJxDb4VZxEvtZeu-desktop.webp",
"category": "image"
},
{
"id": "cmkbyr3mk0003vn673xrqv8xv",
"name": "JhJigMo269K1TFGzSB1OS-desktop.webp",
"realName": "infowp-2.jpg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/JhJigMo269K1TFGzSB1OS-desktop.webp",
"category": "image"
},
{
"id": "cmkax3o8g000rvn6ygqpmo1nb",
"name": "5giLSHSnWEFoZoMEcjhL7-desktop.webp",
"realName": "diare.webp",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/5giLSHSnWEFoZoMEcjhL7-desktop.webp",
"category": "image"
},
{
"id": "cmkax5ukz000uvn6yho3aj2nf",
"name": "3faPo-1wjhVDVU6S7S8sS-desktop.webp",
"realName": "tbc.png",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/3faPo-1wjhVDVU6S7S8sS-desktop.webp",
"category": "image"
},
{
"id": "cmkax72nw000xvn6ymcuvlzom",
"name": "DyX82oztXbHfu6HEvbrpt-desktop.webp",
"realName": "dbd.jpg",
"path": "uploads/images",
"mimeType": "image/webp",
"link": "/api/fileStorage/findUnique/DyX82oztXbHfu6HEvbrpt-desktop.webp",
"category": "image"
}
]

View File

@@ -0,0 +1,37 @@
[
{
"id": "cmkax3ptc000tvn6ytq1lpb2z",
"name": "Diare dan Kolera",
"deskripsiSingkat": "<p>Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?</p><p>Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.</p>",
"deskripsiLengkap": "<p>Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?</p><p>Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.</p><ul><li><p>Penyebab: Bakteri Vibrio cholerae (Kolera) atau Escherichia coli (diare) akibat makanan/minuman yang terkontaminasi.</p></li><li><p>Gejala: Buang air besar cair terus-menerus, dehidrasi, dan lemas. Pencegahan: Menjaga kebersihan makanan dan air, serta mencuci tangan dengan sabun.</p></li></ul>",
"imageId": "cmkax3o8g000rvn6ygqpmo1nb"
},
{
"id": "cmkax5urc000wvn6yxfw0970w",
"name": "TBC (Tuberkulosis)",
"deskripsiSingkat": "<p>Apa itu TBC penyebab, gejala dan cara penanganannya?</p><p>Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.</p>",
"deskripsiLengkap": "<p>Apa itu TBC penyebab, gejala dan cara penanganannya?</p><p>Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.</p><p>Penyebab: Bakteri Mycobacterium tuberculosis yang menyebar melalui udara.</p><p>Gejala: Batuk lebih dari 2 minggu, berkeringat di malam hari, dan berat badan turun.</p><p>Pencegahan: Vaksin BCG, pola hidup sehat, dan pengobatan bagi penderita agar tidak menular.</p>",
"imageId": "cmkax5ukz000uvn6yho3aj2nf"
},
{
"id": "cmkax72s7000zvn6yz3nmvrry",
"name": "Demam Berdarah Dengue (DBD)",
"deskripsiSingkat": "<p>Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.</p>",
"deskripsiLengkap": "<p>Apa itu DBD penyebab, gejala dan cara penanganannya?</p><p>Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.</p><p>Penyebab: Virus dengue yang ditularkan oleh nyamuk Aedes aegypti.</p><p>Gejala: Demam tinggi, nyeri sendi, ruam kulit, dan pendarahan ringan.</p><p>Pencegahan: Menguras tempat air, menutup wadah air, fogging, dan menggunakan lotion anti-nyamuk.</p>",
"imageId": "cmkax72nw000xvn6ymcuvlzom"
},
{
"id": "cmkbyny4f0002vn67kmjmjrpl",
"name": "Fogging sebagai Pencegah DBD di Br. Umahanyar Desa Darmasaba",
"deskripsiSingkat": "<p>Pemerintah Desa Darmasaba melaksanakan fogging di wilayah Br. Umahanyar sebagai upaya pencegahan DBD di Desa Darmasaba.</p>",
"deskripsiLengkap": "<p>Pemerintah Desa Darmasaba melaksanakan fogging (pengasapan) di wilayah Br. Umahanyar Desa Darmasaba Kecamatan Abiansemal Kabupaten Badung dari tanggal 12 sampai dengan 13 April 2023.</p><p>Fogging ini merupakan salah satu metode yang dilakukan oleh Pemdes Darmasaba dalam pencegahan penyakit Demam Berdarah Dengue (DBD) dengan menargetkan nyamuk Aedes aegypti sebagai vektor penyebabnya.</p>",
"imageId": "cmkbynxxo0000vn67wi2nsyl3"
},
{
"id": "cmkbyr3rx0005vn674uhycsxc",
"name": "Gerakan Serentak Penyemprotan Pencegahan PMK di Desa Darmasaba",
"deskripsiSingkat": "<p>Penyemprotan serentak dilakukan di Desa Darmasaba untuk mencegah Penyakit Mulut dan Kaki (PMK) pada hewan ternak.</p>",
"deskripsiLengkap": "<p>Setelah dilakukan vaksinasi Penyakit Mulut dan Kaki (PMK) pada hewan ternak yaitu sapi di wilayah Desa Darmasaba, Pemerintah Desa Darmasaba melaksanakan gerakan serentak penyemprotan pencegahan PMK pada hari Rabu (20/7/2022) di seputaran wilayah Desa Darmasaba.</p><p>Upaya ini dilakukan sebagai bentuk pencegahan terhadap penyebaran PMK dan menjaga kesehatan hewan ternak di desa.</p>",
"imageId": "cmkbyr3mk0003vn673xrqv8xv"
}
]

View File

@@ -0,0 +1,30 @@
[
{
"id": "cmkax1vks000qvn6yyxuvfsi8",
"name": "Puskesmas Pembantu Darmasaba",
"deskripsi": "<p>Puskesmas Pembantu Darmasaba merupakan fasilitas kesehatan tingkat pertama yang berada di Desa Darmasaba, melayani berbagai layanan kesehatan masyarakat termasuk pemeriksaan umum dan imunisasi.</p>",
"imageId": "cmkb6488i001fvn6ylkddch1j",
"whatsapp": "089647037430"
},
{
"id": "cmkawzrvg000nvn6ywyx529em",
"name": "UPTD Puskesmas Abiansemal III (melayani Darmasaba)",
"deskripsi": "<p>Puskesmas Abiansemal III adalah fasilitas kesehatan utama di kecamatan Abiansemal yang melayani wilayah Desa Darmasaba dan sekitarnya. Puskesmas ini memiliki layanan 24 jam serta pelayanan darurat kesehatan dasar.</p>",
"imageId": "cmkb681og001gvn6ykb5uasln",
"whatsapp": "03618463263"
},
{
"id": "cmkawy5in000kvn6yza82pkkg",
"name": "UPTD Puskesmas Abiansemal I",
"deskripsi": "<p>Puskesmas Abiansemal I melayani masyarakat di wilayah kecamatan Abiansemal, termasuk pelayanan kesehatan darurat dan program kesehatan masyarakat.</p>",
"imageId": "cmkb6brrf0000vn14u8c7wnox",
"whatsapp": "087858367111"
},
{
"id": "cmkb6ehu20003vn14ca4xr057",
"name": "Kantor Desa Darmasaba (Kontak Informasi Kesehatan)",
"deskripsi": "<p>Kantor Pemerintahan Desa Darmasaba dapat menjadi saluran kontak awal untuk rujukan layanan kesehatan darurat atau informasi lebih lanjut mengenai fasilitas kesehatan di wilayah desa.</p>",
"imageId": "cmkb6ehpi0001vn14hjp4tdye",
"whatsapp": "081239580000"
}
]

View File

@@ -0,0 +1,26 @@
[
{
"id": "cmkawso7y000evn6ygob15cqb",
"name": "Rembug Stunting di Desa Darmasaba",
"deskripsi": "<p>Pemerintah Desa Darmasaba melaksanakan kegiatan rembug stunting dengan melibatkan bidan desa, kader posyandu, dan tokoh masyarakat. Tujuan kegiatan ini adalah untuk memperkuat upaya pencegahan kekerdilan (stunting) melalui koordinasi layanan kesehatan, edukasi gizi, serta percepatan penanganan gizi buruk di lingkungan desa sebagai bagian dari respons terhadap kondisi kesehatan yang mendesak.</p>",
"imageId": "cmkayz2h8001cvn6yrb7uptjs"
},
{
"id": "cmkawq3ef000bvn6y387vub0y",
"name": "Posko Kesehatan Darurat dan Bencana",
"deskripsi": "<p>Posko Kesehatan Darurat dan Bencana Desa Darmasaba dibentuk sebagai pusat koordinasi dan pertolongan bagi warga yang terdampak situasi darurat seperti banjir, tanah longsor, atau wabah penyakit. Posko ini dilengkapi dengan tenaga medis, obat-obatan dasar, serta dukungan logistik untuk memastikan penanganan cepat dan tepat sasaran. Kegiatan ini juga melibatkan kader kesehatan desa dan karang taruna sebagai relawan lapangan.</p>",
"imageId": "cmkawq38m0009vn6yi7evbhap"
},
{
"id": "cmkawso7y000evn6ygob14bpa",
"name": "Layanan Ambulans Desa Darmasaba",
"deskripsi": "<p>Layanan Ambulans Desa Darmasaba disiapkan untuk membantu masyarakat yang membutuhkan transportasi medis darurat ke fasilitas kesehatan terdekat. Layanan ini beroperasi 24 jam dan dapat dihubungi melalui nomor darurat desa. Tim ambulans terdiri dari relawan terlatih dan tenaga medis yang siap memberikan pertolongan pertama di lokasi kejadian sebelum dirujuk ke rumah sakit atau puskesmas.</p>",
"imageId": "cmkawso29000cvn6y879ahra0"
},
{
"id": "cmkawu7te000hvn6yh3pdnv4w",
"name": "Penanganan Darurat Sosial & Kesehatan Desa Darmasaba",
"deskripsi": "<p>Program Penanganan Darurat Sosial &amp; Kesehatan Desa Darmasaba bertujuan memberikan respon cepat terhadap situasi darurat seperti warga sakit mendadak, kecelakaan, bencana alam, maupun kondisi sosial yang membutuhkan bantuan segera. Tim Siaga Desa Darmasaba berkoordinasi dengan Puskesmas Abiansemal dan BPBD untuk memastikan penanganan yang cepat, tepat, dan manusiawi. Program ini juga mencakup layanan ambulans desa, posko kesehatan darurat, serta bantuan logistik bagi warga terdampak.</p>",
"imageId": "cmkawu7qj000fvn6yubhimyiv"
}
]

View File

@@ -0,0 +1,44 @@
[
{
"id": "cmkawkji50002vn6yzyrlqhh1",
"name": "Gerakan Kulkul PKK dan Posyandu Desa Darmasaba",
"deskripsiSingkat": "<p>Kegiatan bersama PKK dan Posyandu untuk meningkatkan pelayanan kesehatan masyarakat.</p>",
"deskripsi": "<p>Pada hari Minggu, 11 Januari 2025, Pemerintah Desa Darmasaba melalui TP PKK dan TP Posyandu melaksanakan kegiatan Gerakan Kulkul PKK dan Posyandu yang berlangsung serentak di seluruh wilayah Desa Darmasaba untuk memperkuat pelayanan kesehatan dasar dan peningkatan partisipasi masyarakat dalam program Posyandu.</p>",
"imageId": "cmkay1e590010vn6y24pgaa1r"
},
{
"id": "cmkawmlg40005vn6yja2xiev0",
"name": "Pendampingan Kunjungan Rumah oleh Puskesmas Abiansemal 3",
"deskripsiSingkat": "<p>Pendataan kesehatan penyandang disabilitas lewat kunjungan rumah di Desa Darmasaba.</p>",
"deskripsi": "<p>Pemerintah Desa Darmasaba bersama Kelian Banjar Dinas dan kader kesehatan mendampingi kegiatan kunjungan rumah yang dilaksanakan oleh Puskesmas Abiansemal 3 pada 21 Juli 2025, difokuskan pada pendataan dan pemantauan kondisi kesehatan penyandang disabilitas di Banjar Bersih, Desa Darmasaba.</p>",
"imageId": "cmkay6hob0011vn6ybjwejcej"
},
{
"id": "cmkawnr9k0008vn6ymwv0foiv",
"name": "Kegiatan Aksi Sosial Tim Penggerak Posyandu Provinsi Bali di Desa Darmasaba",
"deskripsiSingkat": "<p>Aksi sosial TP Posyandu Bali untuk memperkuat pelayanan posyandu di desa.</p>",
"deskripsi": "<p>Pada 10 Desember 2025, Desa Darmasaba menjadi lokasi pelaksanaan Aksi Sosial Tim Penggerak Posyandu Provinsi Bali yang bertujuan memperkuat pelayanan Posyandu serta meningkatkan kesejahteraan masyarakat, khususnya keluarga dan balita.</p>",
"imageId": "cmkay8vmd0012vn6ylsk2vzfo"
},
{
"id": "cmkawnr9k0008vn6ymwv0dpjw",
"name": "Inovasi BAJRA dalam Penanggulangan Rabies",
"deskripsiSingkat": "<p>Program BAJRA untuk penanggulangan rabies di Desa Darmasaba.</p>",
"deskripsi": "<p>Desa Darmasaba mengembangkan inovasi BAJRA (Bersama Jaga Rabies), sebuah program berbasis komunitas untuk penanggulangan rabies yang mengintegrasikan pelaporan cepat masyarakat, edukasi berkelanjutan dan koordinasi lintas sektor antara kesehatan hewan, manusia, dan pemerintahan desa.</p>",
"imageId": "cmkayd8o90013vn6ye7n8805q"
},
{
"id": "cmkawnr9k0008vn6ymwv0eqkx",
"name": "Posyandu Pudak Amara Berkompetisi",
"deskripsiSingkat": "<p>Partisipasi Posyandu Pudak Amara dalam lomba prestasi Posyandu tingkat provinsi.</p>",
"deskripsi": "<p>Kader Posyandu Pudak Amara Br. Cabe mendapat pendampingan dari Perbekel Darmasaba, Dinas Kesehatan Kab. Badung, Puskesmas Abiansemal III, dan Pustu Desa Darmasaba dalam ajang lomba kader dan Posyandu berprestasi tingkat Provinsi Bali tahun 2025.</p>",
"imageId": "cmkayi0x90016vn6ykddxqyq3"
},
{
"id": "cmkawnr9k0008vn6ymwv1frly",
"name": "Outbound Kader Posyandu Darmasaba",
"deskripsiSingkat": "<p>Program pembinaan dan pengembangan kapasitas kader Posyandu.</p>",
"deskripsi": "<p>Pemdes Darmasaba melaksanakan kegiatan Outbound Posyandu untuk meningkatkan kapasitas dan wawasan Kader Posyandu se-Desa Darmasaba sebagai bagian dari upaya peningkatan kualitas pelayanan kesehatan dasar di masyarakat.</p>",
"imageId": "cmkaykipf0019vn6yknjno3k1"
}
]

View File

@@ -0,0 +1,14 @@
[
{
"id": "cmkao2zwx0008vntzmvqdsdzo",
"workDays": "09:00",
"weekDays": "17:00",
"holiday": "08:00 - 16:00"
},
{
"id": "cmkao2zwx0008vntzmvqdseal",
"workDays": "08:00",
"weekDays": "12:00",
"holiday": ""
}
]

View File

@@ -0,0 +1,16 @@
[
{
"id": "cmkao2zxc0009vntz00kev051",
"kontakPuskesmas": "(0361) 8463263",
"email": "puskesmas@gmail.com",
"facebook": "puskesmas@gmail.com",
"kontakUGD": "(0361) 8463263"
},
{
"id": "cmkao2zxc0009vntz00kev162",
"kontakPuskesmas": "",
"email": "",
"facebook": "",
"kontakUGD": ""
}
]

View File

@@ -0,0 +1,18 @@
[
{
"id": "cmkao2zxk000bvntzbavkbg6p",
"name": "Puskesmas Abiansemal III",
"alamat": "Jl. Ratna, Sibang Kaja, Abiansemal, Badung, Bali 80352",
"jamId": "cmkao2zwx0008vntzmvqdsdzo",
"imageId": "cmkao2zm90007vntzxqkjy5mt",
"kontakId": "cmkao2zxc0009vntz00kev051"
},
{
"id": "cmkao2zxk000bvntzbavkbh7q",
"name": "Puskesmas Pembantu Darmasaba",
"alamat": "Desa Darmasaba, Kecamatan Abiansemal, Kabupaten Badung, Bali",
"jamId": "cmkao2zwx0008vntzmvqdseal",
"imageId": "cmkatoru10000vny38y0wxd6s",
"kontakId": "cmkao2zxc0009vntz00kev162"
}
]

View File

@@ -1118,8 +1118,8 @@ model Posyandu {
nomor String
deskripsi String
jadwalPelayanan String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime @default(now())
@@ -1133,12 +1133,12 @@ model Puskesmas {
alamat String
jam JamOperasional @relation(fields: [jamId], references: [id])
jamId String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
kontak KontakPuskesmas @relation(fields: [kontakId], references: [id])
kontakId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
updatedAt DateTime @updatedAt
deletedAt DateTime @default(now())
isActive Boolean @default(true)
}
@@ -1174,8 +1174,8 @@ model ProgramKesehatan {
name String
deskripsiSingkat String
deskripsi String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime @default(now())
@@ -1187,8 +1187,8 @@ model PenangananDarurat {
id String @id @default(cuid())
name String
deskripsi String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime @default(now())
@@ -1200,8 +1200,8 @@ model KontakDarurat {
id String @id @default(cuid())
name String
deskripsi String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
whatsapp String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -1215,8 +1215,8 @@ model InfoWabahPenyakit {
name String
deskripsiSingkat String
deskripsiLengkap String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
image FileStorage? @relation(fields: [imageId], references: [id])
imageId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime @default(now())

File diff suppressed because it is too large Load Diff

View File

@@ -45,7 +45,7 @@ export default async function seedAssets() {
// 1. Download zip
const url =
"https://cld-dkr-makuro-seafile.wibudev.com/f/bc437c719af64c0bb7f2/?dl=1";
"https://cld-dkr-makuro-seafile.wibudev.com/f/1d6104cdf2b849f89533/?dl=1";
const res = await fetchWithRetry(url, 3, 20000);
// Validasi content-type

View File

@@ -102,8 +102,10 @@ function ListKategoriBerita({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={0}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0}>
<TableThead>
<TableTr>
<TableTh w="50%">

View File

@@ -79,8 +79,10 @@ function ListBerita({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={0}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0}>
<TableThead>
<TableTr>
<TableTh w="50%">Judul</TableTh>

View File

@@ -85,8 +85,10 @@ function ListFoto({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>Judul Foto</TableTh>

View File

@@ -87,66 +87,66 @@ function ListVideo({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover striped verticalSpacing="sm">
<TableThead>
<TableTr>
<TableTh>Judul Video</TableTh>
<TableTh>Tanggal</TableTh>
<TableTh>Deskripsi</TableTh>
<TableTh>Aksi</TableTh>
</TableTr>
</TableThead>
<TableTbody>
{filteredData.length > 0 ? (
filteredData.map((item) => (
<TableTr key={item.id}>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="md" fw={500} lh={1.45} truncate="end" lineClamp={1}>
{item.name}
</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" c="dimmed" lh={1.45}>
{new Date(item.createdAt).toLocaleDateString('id-ID', {
day: 'numeric',
month: 'long',
year: 'numeric',
})}
</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" lh={1.45} truncate="end" lineClamp={1} dangerouslySetInnerHTML={{ __html: item.deskripsi }} />
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Button
variant="light"
color="blue"
onClick={() => router.push(`/admin/desa/gallery/video/${item.id}`)}
fz="sm"
px="xs"
>
<IconDeviceImac size={18} />
<Text ml={5}>Detail</Text>
</Button>
</TableTd>
</TableTr>
))
) : (
<TableTr>
<TableTd colSpan={4}>
<Center py={24}>
<Text c="dimmed" fz="sm" lh={1.4}>
Tidak ada video yang cocok
</Text>
</Center>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped verticalSpacing="sm">
<TableThead>
<TableTr>
<TableTh>Judul Video</TableTh>
<TableTh>Tanggal</TableTh>
<TableTh>Deskripsi</TableTh>
<TableTh>Aksi</TableTh>
</TableTr>
</TableThead>
<TableTbody>
{filteredData.length > 0 ? (
filteredData.map((item) => (
<TableTr key={item.id}>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="md" fw={500} lh={1.45} truncate="end" lineClamp={1}>
{item.name}
</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" c="dimmed" lh={1.45}>
{new Date(item.createdAt).toLocaleDateString('id-ID', {
day: 'numeric',
month: 'long',
year: 'numeric',
})}
</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" lh={1.45} truncate="end" lineClamp={1} dangerouslySetInnerHTML={{ __html: item.deskripsi }} />
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Button
variant="light"
color="blue"
onClick={() => router.push(`/admin/desa/gallery/video/${item.id}`)}
fz="sm"
px="xs"
>
<IconDeviceImac size={18} />
<Text ml={5}>Detail</Text>
</Button>
</TableTd>
</TableTr>
)}
</TableTbody>
</Table>
</Box>
))
) : (
<TableTr>
<TableTd colSpan={4}>
<Center py={24}>
<Text c="dimmed" fz="sm" lh={1.4}>
Tidak ada video yang cocok
</Text>
</Center>
</TableTd>
</TableTr>
)}
</TableTbody>
</Table>
</Box>
{/* Mobile Cards */}

View File

@@ -76,8 +76,10 @@ function ListAjukanPermohonan({ search }: { search: string }) {
</Title>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={0}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} lh={1.4}>Nama</TableTh>

View File

@@ -99,7 +99,9 @@ function ListSuratKeterangan({ search }: { search: string }) {
{/* Desktop Table */}
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="left">

View File

@@ -85,8 +85,10 @@ function ListPelayananTelunjukSakti({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="left" c="gray.8" w="30%">

View File

@@ -81,8 +81,10 @@ function ListPenghargaan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh w="35%">Nama</TableTh>

View File

@@ -116,8 +116,10 @@ function ListKategoriPengumuman({ search }: { search: string }) {
</Stack>
</Box>
<Box visibleFrom="md">
<Table highlightOnHover striped withRowBorders>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped withRowBorders>
<TableThead>
<TableTr>
<TableTh w="60%">

View File

@@ -83,8 +83,10 @@ function ListPengumuman({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="left">

View File

@@ -96,8 +96,10 @@ function ListKategoriPotensi({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover striped withRowBorders miw={700}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped withRowBorders miw={700}>
<TableThead>
<TableTr>
<TableTh w="60%">

View File

@@ -90,8 +90,10 @@ function ListPotensi({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={700}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={700}>
<TableThead>
<TableTr>
<TableTh w="20%">

View File

@@ -80,8 +80,10 @@ function ListPerbekelDariMasaKeMasa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={0}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="left" c="dark.9">Nama Perbekel</TableTh>

View File

@@ -98,7 +98,7 @@ function ListAPBDesa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -114,7 +114,7 @@ function ListBelanja({ search }: { search: string }) {
</Button>
</Group>
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -108,7 +108,7 @@ function ListPembiayaan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
striped

View File

@@ -111,7 +111,7 @@ function ListPendapatan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -104,7 +104,7 @@ function ListPegawaiBumdes({ search }: { search: string }) {
</Group>
{/* Desktop: Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -105,7 +105,7 @@ function ListPosisiOrganisasiBumDes({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -129,7 +129,7 @@ function ListDemografiPekerjaan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -112,7 +112,7 @@ function ListJumlahPendudukMiskin({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -152,7 +152,7 @@ function ListGrafikBerdasarkanPendidikan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -133,7 +133,7 @@ function ListGrafikBerdasarkanUsiaKerjaYangMenganggur({ search }: { search: stri
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -99,7 +99,7 @@ function ListDetailDataPengangguran({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -82,7 +82,7 @@ function ListLowonganKerjaLokal({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -94,7 +94,7 @@ function ListKategoriProduk({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -81,7 +81,7 @@ function ListPasarDesa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -109,7 +109,7 @@ function ListProgramKemiskinan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -106,7 +106,7 @@ function ListSektorUnggulanDesa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -73,7 +73,9 @@ function ListAjukanIdeInovatif({ search }: { search: string }) {
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Title order={4}>Daftar Ide Inovatif</Title>
<Box style={{ overflowX: "auto" }}>
<Table highlightOnHover>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh style={{ width: '20%' }}>Nama</TableTh>

View File

@@ -83,7 +83,7 @@ function ListInfoTeknologiTepatGuna({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -84,7 +84,7 @@ function ListKolaborasiInovasi({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -103,7 +103,7 @@ function ListMitraKolaborasi({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -70,7 +70,7 @@ function ListAdministrasiOnline({ search }: { search: string }) {
</Title>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -90,7 +90,7 @@ function ListJenisLayanan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -96,7 +96,7 @@ function ListJenisPengaduan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -79,7 +79,7 @@ function ListPengaduanMasyarakat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -132,7 +132,7 @@ function ListProgramKreatifDesa({ search }: { search: string }) {
</Button>
</Group>
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -93,8 +93,10 @@ function ListKeamananLingkungan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}
miw={0}
style={{ tableLayout: 'fixed', width: '100%' }}>
<TableThead>

View File

@@ -93,7 +93,7 @@ function ListKontakItem({ search }: { search: string }) {
</Group>
{/* Desktop: Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -92,7 +92,7 @@ function ListKontakDaruratKeamanan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -88,7 +88,7 @@ function ListLaporanPublik({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -92,7 +92,7 @@ function ListPencegahanKriminalitas({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -89,7 +89,7 @@ function ListPolsekTerdekat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -85,7 +85,7 @@ function ListTipsKeamanan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -84,7 +84,9 @@ function ListArtikelKesehatan({ search }: { search: string }) {
{/* Tabel */}
<Box style={{ overflowX: "auto" }}>
<Table highlightOnHover>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh style={{ minWidth: 200 }}>Judul</TableTh>

View File

@@ -81,8 +81,10 @@ function ListDokterTenagaMedis({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh><Text fz="sm" fw={600} lh={1.4}>Nama Dokter</Text></TableTh>

View File

@@ -170,8 +170,10 @@ function ListFasilitasKesehatan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>Fasilitas Kesehatan</TableTh>

View File

@@ -94,8 +94,10 @@ function ListTarifLayanan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>

View File

@@ -85,8 +85,10 @@ function ListJadwalKegiatan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} lh={1.2}>Nama</TableTh>

View File

@@ -147,8 +147,10 @@ function ListGrafikHasilKepuasanMasyarakat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>Nama</TableTh>

View File

@@ -99,8 +99,10 @@ function ListKelahiran({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover fz="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} fz="md">
<TableThead>
<TableTr>
<TableTh><Text fz="sm" fw={600} lh={1.4}>Nama</Text></TableTh>

View File

@@ -95,8 +95,10 @@ function ListKematian({ search }: { search: string }) {
</Group>
{/* Tabel untuk desktop */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh><Text fz="sm" fw={600} lh={1.2}>Nama</Text></TableTh>

View File

@@ -234,7 +234,7 @@ function GrafikPersentaseKelahiranKematian() {
{/* Desktop: Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table striped withTableBorder highlightOnHover>
<Table.Thead>
<Table.Tr>

View File

@@ -93,7 +93,9 @@ function ListInfoWabahPenyakit({ search }: { search: string }) {
{/* Desktop Table */}
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>Judul</TableTh>

View File

@@ -159,8 +159,8 @@ function EditKontakDarurat() {
<TextInput
value={formData.whatsapp}
onChange={(e) => setFormData(prev => ({ ...prev, whatsapp: e.target.value }))}
label="Whatsapp"
placeholder="Masukkan whatsapp"
label="Telepon"
placeholder="Masukkan telepon"
required
/>

View File

@@ -73,7 +73,7 @@ function DetailKontakDarurat() {
</Box>
<Box>
<Text fz="lg" fw="bold">Whatsapp</Text>
<Text fz="lg" fw="bold">Telepon</Text>
<Text fz="md" c="dimmed">{data.whatsapp || '-'}</Text>
</Box>

View File

@@ -120,8 +120,8 @@ function CreateKontakDarurat() {
onChange={(val) => {
kontakDaruratState.create.form.whatsapp = val.target.value;
}}
label={<Text fz="sm" fw="bold">Whatsapp</Text>}
placeholder="Masukkan whatsapp"
label={<Text fz="sm" fw="bold">Telepon</Text>}
placeholder="Masukkan telepon"
required
/>

View File

@@ -83,8 +83,10 @@ function ListKontakDarurat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>Judul</TableTh>

View File

@@ -87,8 +87,10 @@ function ListPenangananDarurat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} lh={1.4}>Judul</TableTh>

View File

@@ -87,31 +87,34 @@ function ListPosyandu({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}
>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="left" lh={1.4}>Nama Posyandu</TableTh>
<TableTh fz="sm" fw={600} ta="left" lh={1.4}>Nomor Posyandu</TableTh>
<TableTh fz="sm" fw={600} ta="left" lh={1.4}>Deskripsi</TableTh>
<TableTh fz="sm" fw={600} ta="left" lh={1.4}>Aksi</TableTh>
<TableTh w={220} fz="sm" fw={600} ta="left" lh={1.4}>Nama Posyandu</TableTh>
<TableTh w={220} fz="sm" fw={600} ta="left" lh={1.4}>Nomor Posyandu</TableTh>
<TableTh w={220} fz="sm" fw={600} ta="left" lh={1.4}>Deskripsi</TableTh>
<TableTh w={150} fz="sm" fw={600} ta="left" lh={1.4}>Aksi</TableTh>
</TableTr>
</TableThead>
<TableTbody>
{filteredData.length > 0 ? (
filteredData.map((item) => (
<TableTr key={item.id}>
<TableTd>
<TableTd w={220}>
<Text fz="md" fw={500} lh={1.5} truncate="end" lineClamp={1}>
{item.name}
</Text>
</TableTd>
<TableTd>
<TableTd w={220}>
<Text fz="sm" c="dimmed" lh={1.5}>
{item.nomor || '-'}
</Text>
</TableTd>
<TableTd>
<TableTd w={220}>
<Text
fz="sm"
lh={1.5}
@@ -120,7 +123,7 @@ function ListPosyandu({ search }: { search: string }) {
dangerouslySetInnerHTML={{ __html: item.deskripsi }}
/>
</TableTd>
<TableTd>
<TableTd w={220}>
<Button
size="xs"
radius="md"

View File

@@ -83,8 +83,10 @@ function ListProgramKesehatan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>

View File

@@ -82,8 +82,10 @@ function ListPuskesmas({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh>

View File

@@ -74,8 +74,10 @@ function ListSdgsDesa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover striped verticalSpacing="sm">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped verticalSpacing="sm">
<TableThead>
<TableTr>
<TableTh style={{ width: '60%' }}>

View File

@@ -66,7 +66,7 @@ function ListAPBDes({ search }: { search: string }) {
return (
<Box py={{ base: 'md', md: 'lg' }}>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Paper withBorder bg={colors['white-1']} p="lg" shadow="md" radius="md">
<Group justify="space-between" mb="md">
<Title order={4} size="lg" lh={1.2}>
@@ -83,7 +83,9 @@ function ListAPBDes({ search }: { search: string }) {
</Group>
<Box>
<Table highlightOnHover miw={0}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0}>
<TableThead>
<TableTr>
<TableTh fz="md" fw={600} ta="left" w="25%">

View File

@@ -123,7 +123,9 @@ function ListKategoriKegiatan({ search }: { search: string }) {
// Desktop table
const renderDesktopTable = () => (
<Box>
<Table highlightOnHover striped verticalSpacing="sm" miw={300}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped verticalSpacing="sm" miw={300}>
<TableThead>
<TableTr>
<TableTh>
@@ -208,7 +210,7 @@ function ListKategoriKegiatan({ search }: { search: string }) {
</Button>
</Group>
<Box visibleFrom="md">{renderDesktopTable()}</Box>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>{renderDesktopTable()}</Box>
<Box hiddenFrom="md">{renderMobileCards()}</Box>
</Paper>

View File

@@ -83,7 +83,7 @@ function ListDesaAntiKorupsi({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
striped
highlightOnHover

View File

@@ -85,7 +85,7 @@ function ListResponden({ search }: ListRespondenProps) {
<Box>
<Stack gap={'lg'}>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Paper p="lg" radius="lg" shadow="md" withBorder>
<Title order={4} size="lg" mb="md" lh={1.2}>
Daftar Responden

View File

@@ -79,7 +79,7 @@ function ListKategoriPrestasi({ search }: { search: string }) {
Tambah Baru
</Button>
</Group>
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table verticalSpacing="sm" highlightOnHover>
<TableThead>
<TableTr>

View File

@@ -73,7 +73,9 @@ function ListPrestasi({ search }: { search: string }) {
{/* Desktop Table */}
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover striped verticalSpacing="sm" miw={800}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped verticalSpacing="sm" miw={800}>
<TableThead>
<TableTr>
<TableTh>Nama Prestasi</TableTh>

View File

@@ -100,8 +100,10 @@ function ListMediaSosial({ search }: { search: string }) {
<Box>
{/* Desktop: Table | Mobile: Card-based vertical layout */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh style={{ width: '25%' }}>

View File

@@ -13,7 +13,7 @@ function ProgramInovasi() {
const [search, setSearch] = useState("");
return (
<Box px={{base: 0, md: "md"}} py="lg">
<Box px={{ base: 0, md: "md" }} py="lg">
<HeaderSearch
title="Program Inovasi"
placeholder="Cari program inovasi..."
@@ -34,8 +34,8 @@ function ListProgramInovasi({ search }: { search: string }) {
const { data, page, totalPages, loading, load } = stateProgramInovasi.findMany;
useShallowEffect(() => {
load(page, 10, debouncedSearch);
}, [page, debouncedSearch]);
load(page, 10, debouncedSearch);
}, [page, debouncedSearch]);
const filteredData = data || [];
@@ -62,67 +62,67 @@ function ListProgramInovasi({ search }: { search: string }) {
Tambah Program
</Button>
</Group>
<Box visibleFrom='md'>
<Box style={{ overflowX: 'auto' }}>
<Table highlightOnHover striped verticalSpacing="sm">
<TableThead>
<Box visibleFrom='md' style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} striped verticalSpacing="sm">
<TableThead>
<TableTr>
<TableTh>Nama Program</TableTh>
<TableTh>Deskripsi</TableTh>
<TableTh>Link</TableTh>
<TableTh>Aksi</TableTh>
</TableTr>
</TableThead>
<TableTbody>
{filteredData.length === 0 ? (
<TableTr>
<TableTh>Nama Program</TableTh>
<TableTh>Deskripsi</TableTh>
<TableTh>Link</TableTh>
<TableTh>Aksi</TableTh>
<TableTd colSpan={4}>
<Center py={20}>
<Text color="dimmed">Belum ada data program inovasi</Text>
</Center>
</TableTd>
</TableTr>
</TableThead>
<TableTbody>
{filteredData.length === 0 ? (
<TableTr>
<TableTd colSpan={4}>
<Center py={20}>
<Text color="dimmed">Belum ada data program inovasi</Text>
</Center>
) : (
filteredData.map((item) => (
<TableTr key={item.id}>
<TableTd>
<Text fw={500}>{item.name}</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" lineClamp={1} dangerouslySetInnerHTML={{ __html: item.description || '-' }}></Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Tooltip label="Buka tautan program" position="top" withArrow>
<a
href={item.link}
target="_blank"
rel="noopener noreferrer"
style={{ color: colors['blue-button'], textDecoration: 'underline' }}
>
<Text truncate fz="sm">{item.link}</Text>
</a>
</Tooltip>
</TableTd>
<TableTd>
<Button
size="xs"
radius="md"
variant="light"
color="blue"
leftSection={<IconDeviceImacCog size={16} />}
onClick={() =>
router.push(`/admin/landing-page/profil/program-inovasi/${item.id}`)
}
>
Detail
</Button>
</TableTd>
</TableTr>
) : (
filteredData.map((item) => (
<TableTr key={item.id}>
<TableTd>
<Text fw={500}>{item.name}</Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Text fz="sm" lineClamp={1} dangerouslySetInnerHTML={{ __html: item.description || '-' }}></Text>
</TableTd>
<TableTd style={{ maxWidth: 250 }}>
<Tooltip label="Buka tautan program" position="top" withArrow>
<a
href={item.link}
target="_blank"
rel="noopener noreferrer"
style={{ color: colors['blue-button'], textDecoration: 'underline' }}
>
<Text truncate fz="sm">{item.link}</Text>
</a>
</Tooltip>
</TableTd>
<TableTd>
<Button
size="xs"
radius="md"
variant="light"
color="blue"
leftSection={<IconDeviceImacCog size={16} />}
onClick={() =>
router.push(`/admin/landing-page/profil/program-inovasi/${item.id}`)
}
>
Detail
</Button>
</TableTd>
</TableTr>
))
)}
</TableTbody>
</Table>
</Box>
))
)}
</TableTbody>
</Table>
</Box>
<Box hiddenFrom="md" pt={20}>
<Stack gap="sm">

View File

@@ -139,8 +139,10 @@ function ListDataLingkunganDesa({ search }: { search: string }) {
Tambah Baru
</Button>
</Group>
<Box visibleFrom="md">
<Table highlightOnHover miw={0} style={{ tableLayout: 'fixed', width: '100%' }}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0} style={{ tableLayout: 'fixed', width: '100%' }}>
<TableThead>
<TableTr>
<TableTh style={{ width: '5%', textAlign: 'center' }}>No</TableTh>
@@ -181,8 +183,10 @@ function ListDataLingkunganDesa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover miw={0} style={{ tableLayout: 'fixed', width: '100%' }}>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false} miw={0} style={{ tableLayout: 'fixed', width: '100%' }}>
<TableThead>
<TableTr>
<TableTh style={{ width: '5%', textAlign: 'center' }}>No</TableTh>

View File

@@ -100,7 +100,7 @@ function ListKategoriKegiatan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -89,7 +89,7 @@ function ListKegiatanDesa({ search }: { search: string }) {
</Group>
{/* Desktop: Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -70,7 +70,7 @@ function ListKeteranganBankSampahTerdekat({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -119,7 +119,7 @@ function ListPengelolaanSampahBankSampah({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -74,7 +74,7 @@ function ListBeasiswaPendaftar({ search }: { search: string }) {
</Group>
{/* Desktop: Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -94,7 +94,7 @@ function ListKeunggulanProgram({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -99,7 +99,7 @@ function ListJenjangPendidikan() {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -89,7 +89,7 @@ function ListLembaga({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -74,7 +74,7 @@ function ListPengajar({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -82,7 +82,7 @@ function ListSiswa({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -86,7 +86,7 @@ function ListDataPerpustakaan({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
striped
highlightOnHover

View File

@@ -82,7 +82,7 @@ function ListKategoriBuku({ search }: { search: string }) {
</Group>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -89,7 +89,7 @@ function ListPeminjamBuku({ search }: { search: string }) {
</Title>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table
highlightOnHover
miw={0}

View File

@@ -85,7 +85,7 @@ function ListResponden({ search }: ListRespondenProps) {
<Box>
<Stack gap={'lg'}>
{/* Desktop Table */}
<Box visibleFrom="md">
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Paper p="lg" radius="lg" shadow="md" withBorder>
<Title order={4} size="lg" mb="md" lh={1.2}>
Daftar Responden

View File

@@ -128,8 +128,10 @@ function Page() {
) : (
<>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} ta="center" w={60}>

View File

@@ -127,8 +127,10 @@ function Page() {
) : (
<>
{/* Desktop Table */}
<Box visibleFrom="md">
<Table highlightOnHover>
<Box visibleFrom="md" style={{ overflowX: 'auto' }}>
<Table highlightOnHover
layout="fixed" // 🔥 PENTING
withColumnBorders={false}>
<TableThead>
<TableTr>
<TableTh fz="sm" fw={600} lh={1.4} ta="center">

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