diff --git a/prisma/data/file-storage.json b/prisma/data/file-storage.json index a4aa1dec..34fe16f1 100644 --- a/prisma/data/file-storage.json +++ b/prisma/data/file-storage.json @@ -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" } ] diff --git a/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json b/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json new file mode 100644 index 00000000..cec9fc18 --- /dev/null +++ b/prisma/data/kesehatan/infowabahpenyakit/infowabahpenyakit.json @@ -0,0 +1,37 @@ +[ + { + "id": "cmkax3ptc000tvn6ytq1lpb2z", + "name": "Diare dan Kolera", + "deskripsiSingkat": "

Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?

Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.

", + "deskripsiLengkap": "

Apa itu Diare dan Kolera penyebab, gejala dan cara penanganannya?

Yuk Kenali gelaja dan cara penanganan Diare dan Kolera yang efektif untuk melindungi keluarga anda.

", + "imageId": "cmkax3o8g000rvn6ygqpmo1nb" + }, + { + "id": "cmkax5urc000wvn6yxfw0970w", + "name": "TBC (Tuberkulosis)", + "deskripsiSingkat": "

Apa itu TBC penyebab, gejala dan cara penanganannya?

Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.

", + "deskripsiLengkap": "

Apa itu TBC penyebab, gejala dan cara penanganannya?

Yuk Kenali gelaja dan cara penanganan TBC yang efektif untuk melindungi keluarga anda.

Penyebab: Bakteri Mycobacterium tuberculosis yang menyebar melalui udara.

Gejala: Batuk lebih dari 2 minggu, berkeringat di malam hari, dan berat badan turun.

Pencegahan: Vaksin BCG, pola hidup sehat, dan pengobatan bagi penderita agar tidak menular.

", + "imageId": "cmkax5ukz000uvn6yho3aj2nf" + }, + { + "id": "cmkax72s7000zvn6yz3nmvrry", + "name": "Demam Berdarah Dengue (DBD)", + "deskripsiSingkat": "

Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.

", + "deskripsiLengkap": "

Apa itu DBD penyebab, gejala dan cara penanganannya?

Yuk Kenali gelaja dan cara penanganan DBD yang efektif untuk melindungi keluarga anda selama musim hujan.

Penyebab: Virus dengue yang ditularkan oleh nyamuk Aedes aegypti.

Gejala: Demam tinggi, nyeri sendi, ruam kulit, dan pendarahan ringan.

Pencegahan: Menguras tempat air, menutup wadah air, fogging, dan menggunakan lotion anti-nyamuk.

", + "imageId": "cmkax72nw000xvn6ymcuvlzom" + }, + { + "id": "cmkbyny4f0002vn67kmjmjrpl", + "name": "Fogging sebagai Pencegah DBD di Br. Umahanyar Desa Darmasaba", + "deskripsiSingkat": "

Pemerintah Desa Darmasaba melaksanakan fogging di wilayah Br. Umahanyar sebagai upaya pencegahan DBD di Desa Darmasaba.

", + "deskripsiLengkap": "

Pemerintah Desa Darmasaba melaksanakan fogging (pengasapan) di wilayah Br. Umahanyar Desa Darmasaba Kecamatan Abiansemal Kabupaten Badung dari tanggal 12 sampai dengan 13 April 2023.

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.

", + "imageId": "cmkbynxxo0000vn67wi2nsyl3" + }, + { + "id": "cmkbyr3rx0005vn674uhycsxc", + "name": "Gerakan Serentak Penyemprotan Pencegahan PMK di Desa Darmasaba", + "deskripsiSingkat": "

Penyemprotan serentak dilakukan di Desa Darmasaba untuk mencegah Penyakit Mulut dan Kaki (PMK) pada hewan ternak.

", + "deskripsiLengkap": "

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.

Upaya ini dilakukan sebagai bentuk pencegahan terhadap penyebaran PMK dan menjaga kesehatan hewan ternak di desa.

", + "imageId": "cmkbyr3mk0003vn673xrqv8xv" + } +] diff --git a/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json b/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json new file mode 100644 index 00000000..3c1477b8 --- /dev/null +++ b/prisma/data/kesehatan/kontak-darurat/kontak-darurat.json @@ -0,0 +1,30 @@ +[ + { + "id": "cmkax1vks000qvn6yyxuvfsi8", + "name": "Puskesmas Pembantu Darmasaba", + "deskripsi": "

Puskesmas Pembantu Darmasaba merupakan fasilitas kesehatan tingkat pertama yang berada di Desa Darmasaba, melayani berbagai layanan kesehatan masyarakat termasuk pemeriksaan umum dan imunisasi.

", + "imageId": "cmkb6488i001fvn6ylkddch1j", + "whatsapp": "089647037430" + }, + { + "id": "cmkawzrvg000nvn6ywyx529em", + "name": "UPTD Puskesmas Abiansemal III (melayani Darmasaba)", + "deskripsi": "

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.

", + "imageId": "cmkb681og001gvn6ykb5uasln", + "whatsapp": "03618463263" + }, + { + "id": "cmkawy5in000kvn6yza82pkkg", + "name": "UPTD Puskesmas Abiansemal I", + "deskripsi": "

Puskesmas Abiansemal I melayani masyarakat di wilayah kecamatan Abiansemal, termasuk pelayanan kesehatan darurat dan program kesehatan masyarakat.

", + "imageId": "cmkb6brrf0000vn14u8c7wnox", + "whatsapp": "087858367111" + }, + { + "id": "cmkb6ehu20003vn14ca4xr057", + "name": "Kantor Desa Darmasaba (Kontak Informasi Kesehatan)", + "deskripsi": "

Kantor Pemerintahan Desa Darmasaba dapat menjadi saluran kontak awal untuk rujukan layanan kesehatan darurat atau informasi lebih lanjut mengenai fasilitas kesehatan di wilayah desa.

", + "imageId": "cmkb6ehpi0001vn14hjp4tdye", + "whatsapp": "081239580000" + } +] diff --git a/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json b/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json new file mode 100644 index 00000000..4b594959 --- /dev/null +++ b/prisma/data/kesehatan/penanganan-darurat/penganan-darurat.json @@ -0,0 +1,26 @@ +[ + { + "id": "cmkawso7y000evn6ygob15cqb", + "name": "Rembug Stunting di Desa Darmasaba", + "deskripsi": "

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.

", + "imageId": "cmkayz2h8001cvn6yrb7uptjs" + }, + { + "id": "cmkawq3ef000bvn6y387vub0y", + "name": "Posko Kesehatan Darurat dan Bencana", + "deskripsi": "

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.

", + "imageId": "cmkawq38m0009vn6yi7evbhap" + }, + { + "id": "cmkawso7y000evn6ygob14bpa", + "name": "Layanan Ambulans Desa Darmasaba", + "deskripsi": "

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.

", + "imageId": "cmkawso29000cvn6y879ahra0" + }, + { + "id": "cmkawu7te000hvn6yh3pdnv4w", + "name": "Penanganan Darurat Sosial & Kesehatan Desa Darmasaba", + "deskripsi": "

Program Penanganan Darurat Sosial & 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.

", + "imageId": "cmkawu7qj000fvn6yubhimyiv" + } +] diff --git a/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json b/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json new file mode 100644 index 00000000..8234f506 --- /dev/null +++ b/prisma/data/kesehatan/program-kesehatan/program-kesehatan.json @@ -0,0 +1,44 @@ +[ + { + "id": "cmkawkji50002vn6yzyrlqhh1", + "name": "Gerakan Kulkul PKK dan Posyandu Desa Darmasaba", + "deskripsiSingkat": "

Kegiatan bersama PKK dan Posyandu untuk meningkatkan pelayanan kesehatan masyarakat.

", + "deskripsi": "

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.

", + "imageId": "cmkay1e590010vn6y24pgaa1r" + }, + { + "id": "cmkawmlg40005vn6yja2xiev0", + "name": "Pendampingan Kunjungan Rumah oleh Puskesmas Abiansemal 3", + "deskripsiSingkat": "

Pendataan kesehatan penyandang disabilitas lewat kunjungan rumah di Desa Darmasaba.

", + "deskripsi": "

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.

", + "imageId": "cmkay6hob0011vn6ybjwejcej" + }, + { + "id": "cmkawnr9k0008vn6ymwv0foiv", + "name": "Kegiatan Aksi Sosial Tim Penggerak Posyandu Provinsi Bali di Desa Darmasaba", + "deskripsiSingkat": "

Aksi sosial TP Posyandu Bali untuk memperkuat pelayanan posyandu di desa.

", + "deskripsi": "

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.

", + "imageId": "cmkay8vmd0012vn6ylsk2vzfo" + }, + { + "id": "cmkawnr9k0008vn6ymwv0dpjw", + "name": "Inovasi BAJRA dalam Penanggulangan Rabies", + "deskripsiSingkat": "

Program BAJRA untuk penanggulangan rabies di Desa Darmasaba.

", + "deskripsi": "

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.

", + "imageId": "cmkayd8o90013vn6ye7n8805q" + }, + { + "id": "cmkawnr9k0008vn6ymwv0eqkx", + "name": "Posyandu Pudak Amara Berkompetisi", + "deskripsiSingkat": "

Partisipasi Posyandu Pudak Amara dalam lomba prestasi Posyandu tingkat provinsi.

", + "deskripsi": "

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.

", + "imageId": "cmkayi0x90016vn6ykddxqyq3" + }, + { + "id": "cmkawnr9k0008vn6ymwv1frly", + "name": "Outbound Kader Posyandu Darmasaba", + "deskripsiSingkat": "

Program pembinaan dan pengembangan kapasitas kader Posyandu.

", + "deskripsi": "

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.

", + "imageId": "cmkaykipf0019vn6yknjno3k1" + } +] diff --git a/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json b/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json new file mode 100644 index 00000000..b59aa3e6 --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/jam-puskesmas/jam.json @@ -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": "–" + } +] diff --git a/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json b/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json new file mode 100644 index 00000000..df7263ae --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/kontak-puskesmas/kontak.json @@ -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": "–" + } +] diff --git a/prisma/data/kesehatan/puskesmas/puskesmas.json b/prisma/data/kesehatan/puskesmas/puskesmas.json new file mode 100644 index 00000000..6599996d --- /dev/null +++ b/prisma/data/kesehatan/puskesmas/puskesmas.json @@ -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" + } +] diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 03172f31..dcdcf5e1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -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()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 892a067f..e9026cd7 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -26,7 +26,7 @@ import pelayananPerizinanBerusaha from "./data/desa/layanan/pelayananPerizinanBe import pelayananSuratKeterangan from "./data/desa/layanan/pelayananSuratKeterangan.json"; import pelayananTelunjukSaktiDesa from "./data/desa/layanan/pelayananTelunjukSaktiDesa.json"; import pelayananPendudukNonPermanen from "./data/desa/layanan/pelayanaPendudukNonPermanen.json"; -import penghargaan from "./data/desa/penghargaan/penghargaan.json" +import penghargaan from "./data/desa/penghargaan/penghargaan.json"; import lambangDesa from "./data/desa/profile/lambang_desa.json"; import maskotDesa from "./data/desa/profile/maskot_desa.json"; import profilPerbekel from "./data/desa/profile/profil_perbekel.json"; @@ -37,6 +37,14 @@ import detailDataPengangguran from "./data/ekonomi/jumlah-pengangguran/detail-da import kategoriProduk from "./data/ekonomi/pasar-desa/kategori-produk.json"; import pegawai from "./data/ekonomi/struktur-organisasi/pegawai-bumdes.json"; import posisiOrganisasi from "./data/ekonomi/struktur-organisasi/posisi-organisasi-bumdes.json"; +import posyandu from "./data/kesehatan/posyandu/posyandu.json"; +import kontakPuskesmas from "./data/kesehatan/puskesmas/kontak-puskesmas/kontak.json" +import jamPuskesmas from "./data/kesehatan/puskesmas/jam-puskesmas/jam.json" +import puskesmas from "./data/kesehatan/puskesmas/puskesmas.json"; +import programKesehatan from "./data/kesehatan/program-kesehatan/program-kesehatan.json" +import penangananDarurat from "./data/kesehatan/penanganan-darurat/penganan-darurat.json" +import kontakDarurat from "./data/kesehatan/kontak-darurat/kontak-darurat.json" +import infoWabahPenyakit from "./data/kesehatan/infowabahpenyakit/infowabahpenyakit.json" import berita from "./data/desa/berita/berita.json"; import kategoriBerita from "./data/desa/berita/kategori-berita.json"; import contohEdukasiLingkungan from "./data/lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json"; @@ -346,200 +354,6 @@ import resolveImageById from "./resolveImageByName"; } console.log("desa anti korupsi success ..."); - // =========== KATEGORI PRESTASI DESA=========== - for (const c of kategoriPrestasiDesa) { - await prisma.kategoriPrestasiDesa.upsert({ - where: { id: c.id }, - update: { - name: c.name, - }, - create: { - id: c.id, - name: c.name, - }, - }); - } - console.log("kategori prestasi desa success ..."); - - // =========== PRESTASI DESA=========== - for (const p of prestasiDesa) { - await prisma.prestasiDesa.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - kategoriId: p.kategoriId, - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - kategoriId: p.kategoriId, - }, - }); - } - console.log("prestasi desa success ..."); - - // =========== PENGHARGAAN =========== - console.log("🔄 Seeding Penghargaan..."); - for (const p of penghargaan) { - const existing = await prisma.penghargaan.findUnique({ - where: { id: p.id }, - select: { imageId: true }, - }); - - let imageId = existing?.imageId; // Pertahankan existing - - // Kalau belum ada imageId, cari berdasarkan name/realName - if (!imageId && p.imageId) { - // ✅ Cari langsung berdasarkan ID yang ada di p.imageId - const fileRecord = await prisma.fileStorage.findUnique({ - where: { id: p.imageId }, - select: { id: true, name: true }, - }); - - if (fileRecord) { - imageId = fileRecord.id; - console.log( - `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` - ); - } else { - console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); - imageId = null; - } - } - - await prisma.penghargaan.upsert({ - where: { id: p.id }, - update: { - name: p.name, - juara: p.juara, - deskripsi: p.deskripsi, - imageId, - }, - create: { - id: p.id, - name: p.name, - juara: p.juara, - deskripsi: p.deskripsi, - imageId, - }, - }); - } - console.log("penghargaan success ..."); - - // =========== LAYANAN DESA =========== - console.log("🔄 Seeding Pelayanan Surat Keterangan..."); - - for (const p of pelayananSuratKeterangan) { - const existing = await prisma.pelayananSuratKeterangan.findUnique({ - where: { id: p.id }, - select: { imageId: true, image2Id: true }, // 📌 tambahkan image2Id - }); - - // 1️⃣ Handle imageId - let imageId = existing?.imageId ?? null; - - if (!imageId && p.image) { - imageId = await resolveImageById(p.image); - - if (imageId) { - console.log(`✅ Image resolved for "${p.name}" → ${p.image}`); - } else { - console.warn(`⚠️ Image not resolved for "${p.name}" → ${p.image}`); - } - } - - // 2️⃣ Handle image2Id - let image2Id = existing?.image2Id ?? null; - - if (!image2Id && p.image2) { - image2Id = await resolveImageById(p.image2); - - if (image2Id) { - console.log(`✅ Image2 resolved for "${p.name}" → ${p.image2}`); - } else { - console.warn(`⚠️ Image2 not resolved for "${p.name}" → ${p.image2}`); - } - } - - // 3️⃣ Upsert dengan kedua image - await prisma.pelayananSuratKeterangan.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - imageId, - image2Id, // 📌 tambahkan ini - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - imageId, - image2Id, // 📌 tambahkan ini - }, - }); - } - console.log("✅ Pelayanan Surat Keterangan success..."); - - for (const p of pelayananTelunjukSaktiDesa) { - await prisma.pelayananTelunjukSaktiDesa.upsert({ - where: { id: p.id }, - update: { - name: p.name, - deskripsi: p.deskripsi, - link: p.link, - }, - create: { - id: p.id, - name: p.name, - deskripsi: p.deskripsi, - link: p.link, - }, - }); - } - console.log("pelayanan telunjuk sakti desa success ..."); - - for (const l of pelayananPerizinanBerusaha) { - await prisma.pelayananPerizinanBerusaha.upsert({ - where: { - id: l.id, - }, - update: { - name: l.name, - deskripsi: l.deskripsi, - link: l.link, - }, - create: { - id: l.id, - name: l.name, - deskripsi: l.deskripsi, - link: l.link, - }, - }); - } - - console.log("pelayanan perizinan berusaha success ..."); - - for (const l of pelayananPendudukNonPermanen) { - await prisma.pelayananPendudukNonPermanen.upsert({ - where: { - id: l.id, - }, - update: { - name: l.name, - deskripsi: l.deskripsi, - }, - create: { - id: l.id, - name: l.name, - deskripsi: l.deskripsi, - }, - }); - } - console.log("pelayanan penduduk non permanen success ..."); - // =========== SDGSDesa =========== console.log("🔄 Seeding SDGS Desa..."); for (const l of sdgsDesa) { @@ -603,7 +417,291 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("sdgs desa success ..."); + console.log("apbdes success ..."); + + // =========== KATEGORI PRESTASI DESA=========== + for (const c of kategoriPrestasiDesa) { + await prisma.kategoriPrestasiDesa.upsert({ + where: { id: c.id }, + update: { + name: c.name, + }, + create: { + id: c.id, + name: c.name, + }, + }); + } + console.log("kategori prestasi desa success ..."); + + // =========== PRESTASI DESA=========== + for (const p of prestasiDesa) { + await prisma.prestasiDesa.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + kategoriId: p.kategoriId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + kategoriId: p.kategoriId, + }, + }); + } + console.log("prestasi desa success ..."); + + // =========== MENU PPID =========== + // =========== SUBMENU PROFILE PPID =========== + for (const c of profilePPID) { + await prisma.profilePPID.upsert({ + where: { id: c.id }, + update: { + name: c.name, + biodata: c.biodata, + riwayat: c.riwayat, + pengalaman: c.pengalaman, + unggulan: c.unggulan, + // imageId tidak di-update + }, + create: { + id: c.id, + name: c.name, + biodata: c.biodata, + riwayat: c.riwayat, + pengalaman: c.pengalaman, + unggulan: c.unggulan, + // imageId tidak di-create + }, + }); + } + console.log("✅ profilePPID seeded without imageId (editable later via UI)"); + + // =========== SUBMENU STRUKTUR PPID =========== + // =========== POSISI ORGANISASI PPID =========== + + const flattenedPosisi = posisiOrganisasiPPID.flat(); + + // ✅ Urutkan berdasarkan hierarki + const sortedPosisi = flattenedPosisi.sort((a, b) => a.hierarki - b.hierarki); + + for (const p of sortedPosisi) { + console.log(`Seeding: ${p.nama} (id: ${p.id}, parent: ${p.parentId})`); + + if (p.parentId) { + const parentExists = flattenedPosisi.some((pos) => pos.id === p.parentId); + if (!parentExists) { + console.warn( + `⚠️ Parent tidak ditemukan: ${p.parentId} untuk ${p.nama}` + ); + continue; + } + } + + await prisma.posisiOrganisasiPPID.upsert({ + where: { id: p.id }, + update: p, + create: p, + }); + } + console.log("posisi organisasi berhasil"); + + // =========== PEGAWAI PPID =========== + console.log("🔄 Seeding pegawai PPID..."); + const flattenedPegawai = pegawaiPPID.flat(); + + // Check for duplicate emails + const emails = new Set(); + for (const p of flattenedPegawai) { + if (emails.has(p.email)) { + console.warn(`⚠️ Duplicate email found in pegawaiPPID: ${p.email}`); + } + emails.add(p.email); + } + + for (const p of flattenedPegawai) { + try { + await prisma.pegawaiPPID.upsert({ + where: { id: p.id }, + update: p, + create: p, + }); + console.log(`✅ Seeded pegawai PPID -> ${p.namaLengkap}`); + } catch (error: any) { + if (error.code === "P2002") { + console.warn( + `⚠️ Pegawai PPID with duplicate email (skipping): ${p.email}` + ); + } else { + console.error( + `❌ Failed to seed pegawai PPID ${p.namaLengkap}:`, + error.message + ); + } + } + } + console.log("✅ pegawai PPID seeding completed"); + + // =========== SUBMENU VISI MISI PPID =========== + + for (const v of visiMisiPPID) { + await prisma.visiMisiPPID.upsert({ + where: { + id: v.id, + }, + update: { + misi: v.misi, + visi: v.visi, + }, + create: { + id: v.id, + misi: v.misi, + visi: v.visi, + }, + }); + } + console.log("visi misi PPID success ..."); + + // =========== SUBMENU DASAR HUKUM PPID =========== + for (const v of dasarHukumPPID) { + await prisma.dasarHukumPPID.upsert({ + where: { + id: v.id, + }, + update: { + judul: v.judul, + content: v.content, + }, + create: { + id: v.id, + judul: v.judul, + content: v.content, + }, + }); + } + console.log("dasar hukum PPID success ..."); + + // =========== SUBMENU DAFTAR INFORMASI PUBLIK PPID =========== + for (const v of daftarInformasiPublik) { + // Convert string date to Date object + const tanggal = new Date(v.tanggal); + + await prisma.daftarInformasiPublik.upsert({ + where: { + id: v.id, + }, + update: { + jenisInformasi: v.jenisInformasi, + deskripsi: v.deskripsi, + tanggal: tanggal, + }, + create: { + id: v.id, + jenisInformasi: v.jenisInformasi, + deskripsi: v.deskripsi, + tanggal: tanggal, + }, + }); + } + console.log("daftar informasi publik PPID success ..."); + + // =========== SUBMENU PERMOHONAN INFORMASI PUBLIK =========== + + for (const j of jenisInformasiDiminta) { + await prisma.jenisInformasiDiminta.upsert({ + where: { + name: j.name, + }, + update: { + name: j.name, + }, + create: { + name: j.name, + }, + }); + } + console.log("jenis informasi diminta success ..."); + + for (const c of caraMemperolehInformasi) { + await prisma.caraMemperolehInformasi.upsert({ + where: { + name: c.name, + }, + update: { + name: c.name, + }, + create: { + name: c.name, + }, + }); + } + console.log("cara memperoleh informasi success ..."); + + for (const c of caraMemperolehSalinanInformasi) { + await prisma.caraMemperolehSalinanInformasi.upsert({ + where: { + name: c.name, + }, + update: { + name: c.name, + }, + create: { + name: c.name, + }, + }); + } + console.log("cara memperoleh salinan informasi success ..."); + + // =========== SUBMENU INDEKS KEPUASAN MASYARAKAT =========== + for (const j of jenisKelamin) { + await prisma.jenisKelaminResponden.upsert({ + where: { + id: j.id, + }, + update: { + name: j.name, + }, + create: { + id: j.id, + name: j.name, + }, + }); + } + console.log("jenis kelamin responden success ..."); + + for (const r of pilihanRatingResponden) { + await prisma.pilihanRatingResponden.upsert({ + where: { + id: r.id, + }, + update: { + name: r.name, + }, + create: { + id: r.id, + name: r.name, + }, + }); + } + console.log("pilihan rating responden success ..."); + + for (const u of umurResponden) { + await prisma.umurResponden.upsert({ + where: { + id: u.id, + }, + update: { + name: u.name, + }, + create: { + id: u.id, + name: u.name, + }, + }); + } + console.log("umur responden success ..."); // =========== MENU DESA =========== // =========== SUBMENU PROFILE =========== @@ -783,160 +881,8 @@ import resolveImageById from "./resolveImageByName"; console.log("visi misi desa success ..."); - // =========== MENU PPID =========== - // =========== SUBMENU PROFILE PPID =========== - for (const c of profilePPID) { - await prisma.profilePPID.upsert({ - where: { id: c.id }, - update: { - name: c.name, - biodata: c.biodata, - riwayat: c.riwayat, - pengalaman: c.pengalaman, - unggulan: c.unggulan, - // imageId tidak di-update - }, - create: { - id: c.id, - name: c.name, - biodata: c.biodata, - riwayat: c.riwayat, - pengalaman: c.pengalaman, - unggulan: c.unggulan, - // imageId tidak di-create - }, - }); - } - console.log("✅ profilePPID seeded without imageId (editable later via UI)"); - - // =========== SUBMENU STRUKTUR PPID =========== - // =========== POSISI ORGANISASI PPID =========== - - const flattenedPosisi = posisiOrganisasiPPID.flat(); - - // ✅ Urutkan berdasarkan hierarki - const sortedPosisi = flattenedPosisi.sort((a, b) => a.hierarki - b.hierarki); - - for (const p of sortedPosisi) { - console.log(`Seeding: ${p.nama} (id: ${p.id}, parent: ${p.parentId})`); - - if (p.parentId) { - const parentExists = flattenedPosisi.some((pos) => pos.id === p.parentId); - if (!parentExists) { - console.warn( - `⚠️ Parent tidak ditemukan: ${p.parentId} untuk ${p.nama}` - ); - continue; - } - } - - await prisma.posisiOrganisasiPPID.upsert({ - where: { id: p.id }, - update: p, - create: p, - }); - } - console.log("posisi organisasi berhasil"); - - // =========== PEGAWAI PPID =========== - console.log("🔄 Seeding pegawai PPID..."); - const flattenedPegawai = pegawaiPPID.flat(); - - // Check for duplicate emails - const emails = new Set(); - for (const p of flattenedPegawai) { - if (emails.has(p.email)) { - console.warn(`⚠️ Duplicate email found in pegawaiPPID: ${p.email}`); - } - emails.add(p.email); - } - - for (const p of flattenedPegawai) { - try { - await prisma.pegawaiPPID.upsert({ - where: { id: p.id }, - update: p, - create: p, - }); - console.log(`✅ Seeded pegawai PPID -> ${p.namaLengkap}`); - } catch (error: any) { - if (error.code === "P2002") { - console.warn( - `⚠️ Pegawai PPID with duplicate email (skipping): ${p.email}` - ); - } else { - console.error( - `❌ Failed to seed pegawai PPID ${p.namaLengkap}:`, - error.message - ); - } - } - } - console.log("✅ pegawai PPID seeding completed"); - - // =========== SUBMENU VISI MISI PPID =========== - - for (const v of visiMisiPPID) { - await prisma.visiMisiPPID.upsert({ - where: { - id: v.id, - }, - update: { - misi: v.misi, - visi: v.visi, - }, - create: { - id: v.id, - misi: v.misi, - visi: v.visi, - }, - }); - } - console.log("visi misi PPID success ..."); - - // =========== SUBMENU DASAR HUKUM PPID =========== - for (const v of dasarHukumPPID) { - await prisma.dasarHukumPPID.upsert({ - where: { - id: v.id, - }, - update: { - judul: v.judul, - content: v.content, - }, - create: { - id: v.id, - judul: v.judul, - content: v.content, - }, - }); - } - console.log("dasar hukum PPID success ..."); - - // =========== SUBMENU DAFTAR INFORMASI PUBLIK PPID =========== - for (const v of daftarInformasiPublik) { - // Convert string date to Date object - const tanggal = new Date(v.tanggal); - - await prisma.daftarInformasiPublik.upsert({ - where: { - id: v.id, - }, - update: { - jenisInformasi: v.jenisInformasi, - deskripsi: v.deskripsi, - tanggal: tanggal, - }, - create: { - id: v.id, - jenisInformasi: v.jenisInformasi, - deskripsi: v.deskripsi, - tanggal: tanggal, - }, - }); - } - console.log("daftar informasi publik PPID success ..."); - + // =========== SUBMENU POTENSI DESA =========== + console.log("🔄Seeding Kategori Potensi Desa ..."); for (const c of kategoriPotensi) { await prisma.kategoriPotensi.upsert({ where: { @@ -1005,6 +951,8 @@ import resolveImageById from "./resolveImageByName"; console.log("potensi success ..."); + // ================== SUBMENU BERITA ======================== + console.log("🔄 Seeding Kategori Berita..."); for (const k of kategoriBerita) { await prisma.kategoriBerita.upsert({ where: { @@ -1069,9 +1017,10 @@ import resolveImageById from "./resolveImageByName"; }, }); } + console.log("berita success ..."); - console.log("potensi success ..."); - + // ================== SUBMENU PENGUMUMAN ======================== + console.log("🔄 Seeding Kategori Pengumuman..."); for (const c of kategoriPengumuman) { await safeSeedUnique( "categoryPengumuman", @@ -1083,8 +1032,9 @@ import resolveImageById from "./resolveImageByName"; ); } - console.log("category pengumuman success ..."); + console.log("kategori pengumuman success ..."); + console.log("🔄 Seeding Pengumuman..."); for (const p of pengumuman) { await prisma.pengumuman.upsert({ where: { @@ -1105,8 +1055,10 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("category pengumuman success ..."); + console.log("pengumuman success ..."); + // ================== SUBMENU GALLERY ======================== + console.log("🔄 Seeding Gallery Video..."); for (const v of galleryVideo) { await prisma.galleryVideo.upsert({ where: { @@ -1125,100 +1077,167 @@ import resolveImageById from "./resolveImageByName"; }); } - console.log("category pengumuman success ..."); + console.log("gallery video success ..."); - for (const j of jenisInformasiDiminta) { - await prisma.jenisInformasiDiminta.upsert({ - where: { - name: j.name, - }, + // =========== LAYANAN DESA =========== + console.log("🔄 Seeding Pelayanan Surat Keterangan..."); + + for (const p of pelayananSuratKeterangan) { + const existing = await prisma.pelayananSuratKeterangan.findUnique({ + where: { id: p.id }, + select: { imageId: true, image2Id: true }, // 📌 tambahkan image2Id + }); + + // 1️⃣ Handle imageId + let imageId = existing?.imageId ?? null; + + if (!imageId && p.image) { + imageId = await resolveImageById(p.image); + + if (imageId) { + console.log(`✅ Image resolved for "${p.name}" → ${p.image}`); + } else { + console.warn(`⚠️ Image not resolved for "${p.name}" → ${p.image}`); + } + } + + // 2️⃣ Handle image2Id + let image2Id = existing?.image2Id ?? null; + + if (!image2Id && p.image2) { + image2Id = await resolveImageById(p.image2); + + if (image2Id) { + console.log(`✅ Image2 resolved for "${p.name}" → ${p.image2}`); + } else { + console.warn(`⚠️ Image2 not resolved for "${p.name}" → ${p.image2}`); + } + } + + // 3️⃣ Upsert dengan kedua image + await prisma.pelayananSuratKeterangan.upsert({ + where: { id: p.id }, update: { - name: j.name, + name: p.name, + deskripsi: p.deskripsi, + imageId, + image2Id, // 📌 tambahkan ini }, create: { - name: j.name, + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + imageId, + image2Id, // 📌 tambahkan ini }, }); } - console.log("jenis informasi diminta success ..."); + console.log("✅ Pelayanan Surat Keterangan success..."); - for (const c of caraMemperolehInformasi) { - await prisma.caraMemperolehInformasi.upsert({ - where: { - name: c.name, - }, + for (const p of pelayananTelunjukSaktiDesa) { + await prisma.pelayananTelunjukSaktiDesa.upsert({ + where: { id: p.id }, update: { - name: c.name, + name: p.name, + deskripsi: p.deskripsi, + link: p.link, }, create: { - name: c.name, + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + link: p.link, }, }); } - console.log("cara memperoleh informasi success ..."); + console.log("pelayanan telunjuk sakti desa success ..."); - for (const c of caraMemperolehSalinanInformasi) { - await prisma.caraMemperolehSalinanInformasi.upsert({ + for (const l of pelayananPerizinanBerusaha) { + await prisma.pelayananPerizinanBerusaha.upsert({ where: { - name: c.name, + id: l.id, }, update: { - name: c.name, + name: l.name, + deskripsi: l.deskripsi, + link: l.link, }, create: { - name: c.name, + id: l.id, + name: l.name, + deskripsi: l.deskripsi, + link: l.link, }, }); } - console.log("cara memperoleh salinan informasi success ..."); - for (const j of jenisKelamin) { - await prisma.jenisKelaminResponden.upsert({ + console.log("pelayanan perizinan berusaha success ..."); + + for (const l of pelayananPendudukNonPermanen) { + await prisma.pelayananPendudukNonPermanen.upsert({ where: { - id: j.id, + id: l.id, }, update: { - name: j.name, + name: l.name, + deskripsi: l.deskripsi, }, create: { - id: j.id, - name: j.name, + id: l.id, + name: l.name, + deskripsi: l.deskripsi, }, }); } - console.log("jenis kelamin responden success ..."); + console.log("pelayanan penduduk non permanen success ..."); - for (const r of pilihanRatingResponden) { - await prisma.pilihanRatingResponden.upsert({ - where: { - id: r.id, - }, + // =========== PENGHARGAAN =========== + console.log("🔄 Seeding Penghargaan..."); + for (const p of penghargaan) { + const existing = await prisma.penghargaan.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.penghargaan.upsert({ + where: { id: p.id }, update: { - name: r.name, + name: p.name, + juara: p.juara, + deskripsi: p.deskripsi, + imageId, }, create: { - id: r.id, - name: r.name, + id: p.id, + name: p.name, + juara: p.juara, + deskripsi: p.deskripsi, + imageId, }, }); } - console.log("pilihan rating responden success ..."); - - for (const u of umurResponden) { - await prisma.umurResponden.upsert({ - where: { - id: u.id, - }, - update: { - name: u.name, - }, - create: { - id: u.id, - name: u.name, - }, - }); - } - console.log("umur responden success ..."); + console.log("penghargaan success ..."); for (const k of kategoriProduk) { await prisma.kategoriProduk.upsert({ @@ -1238,6 +1257,341 @@ import resolveImageById from "./resolveImageByName"; const flattenedPosisiBumdes = posisiOrganisasi.flat(); + // ====================== MENU KESEHATAN ======================== + // ==================== SUBMENU POSYANDU ========================= + console.log("🔄 Seeding Posyandu..."); + for (const p of posyandu) { + const existing = await prisma.posyandu.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.posyandu.upsert({ + where: { id: p.id }, + update: { + name: p.name, + nomor: p.nomor, + deskripsi: p.deskripsi, + jadwalPelayanan: p.jadwalPelayanan, + imageId, + }, + create: { + id: p.id, + name: p.name, + nomor: p.nomor, + deskripsi: p.deskripsi, + jadwalPelayanan: p.jadwalPelayanan, + imageId, + }, + }); + } + console.log("posyandu success ..."); + + // ==================== SUBMENU PUSKESMAS ========================= + console.log("🔄 Seeding Kontak Puskesmas..."); + for (const k of kontakPuskesmas) { + await prisma.kontakPuskesmas.upsert({ + where: { + id: k.id, + }, + update: { + kontakPuskesmas: k.kontakPuskesmas, + email: k.email, + facebook: k.facebook, + kontakUGD: k.kontakUGD, + }, + create: { + id: k.id, + kontakPuskesmas: k.kontakPuskesmas, + email: k.email, + facebook: k.facebook, + kontakUGD: k.kontakUGD, + }, + }); + } + console.log("kontak puskesmas success ..."); + + console.log("🔄 Seeding Jam Puskesmas..."); + for (const k of jamPuskesmas) { + await prisma.jamOperasional.upsert({ + where: { + id: k.id, + }, + update: { + workDays: k.workDays, + weekDays: k.weekDays, + holiday: k.holiday, + }, + create: { + id: k.id, + workDays: k.workDays, + weekDays: k.weekDays, + holiday: k.holiday, + }, + }); + } + console.log("jam puskesmas success ..."); + + console.log("🔄 Seeding Puskesmas..."); + for (const p of puskesmas) { + const existing = await prisma.puskesmas.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.puskesmas.upsert({ + where: { id: p.id }, + update: { + name: p.name, + alamat: p.alamat, + jamId: p.jamId, + imageId, + kontakId: p.kontakId, + }, + create: { + id: p.id, + name: p.name, + alamat: p.alamat, + jamId: p.jamId, + imageId, + kontakId: p.kontakId, + }, + }); + } + console.log("puskesmas success ..."); + + // ==================== SUBMENU PROGRAM KESEHATAN ========================= + console.log("🔄 Seeding Program Kesehatan..."); + for (const p of programKesehatan) { + const existing = await prisma.programKesehatan.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.programKesehatan.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsi: p.deskripsi, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsi: p.deskripsi, + imageId, + }, + }); + } + console.log("program kesehatan success ..."); + + // ==================== SUBMENU PENANGANAN DARURAT ========================= + console.log("🔄 Seeding Penanganan Darurat..."); + for (const p of penangananDarurat) { + const existing = await prisma.penangananDarurat.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.penangananDarurat.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + imageId, + }, + }); + } + console.log("penanganan darurat success ..."); + + // ==================== SUBMENU KONTAK DARURAT ========================= + console.log("🔄 Seeding Kontak Darurat..."); + for (const p of kontakDarurat) { + const existing = await prisma.kontakDarurat.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.kontakDarurat.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsi: p.deskripsi, + whatsapp: p.whatsapp, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsi: p.deskripsi, + whatsapp: p.whatsapp, + imageId, + }, + }); + } + console.log("kontak darurat success ..."); + + // ==================== SUBMENU INFO WABAH PENYAKIT ========================= + console.log("🔄 Seeding Info Wabah Penyakit..."); + for (const p of infoWabahPenyakit) { + const existing = await prisma.infoWabahPenyakit.findUnique({ + where: { id: p.id }, + select: { imageId: true }, + }); + + let imageId = existing?.imageId; // Pertahankan existing + + // Kalau belum ada imageId, cari berdasarkan name/realName + if (!imageId && p.imageId) { + // ✅ Cari langsung berdasarkan ID yang ada di p.imageId + const fileRecord = await prisma.fileStorage.findUnique({ + where: { id: p.imageId }, + select: { id: true, name: true }, + }); + + if (fileRecord) { + imageId = fileRecord.id; + console.log( + `✅ Found file by ID: ${fileRecord.name} (${fileRecord.id})` + ); + } else { + console.warn(`⚠️ File with ID ${p.imageId} not found for ${p.name}`); + imageId = null; + } + } + + await prisma.infoWabahPenyakit.upsert({ + where: { id: p.id }, + update: { + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsiLengkap: p.deskripsiLengkap, + imageId, + }, + create: { + id: p.id, + name: p.name, + deskripsiSingkat: p.deskripsiSingkat, + deskripsiLengkap: p.deskripsiLengkap, + imageId, + }, + }); + } + console.log("kontak darurat success ..."); + // ✅ Urutkan berdasarkan hierarki const sortedPosisiBumdes = flattenedPosisiBumdes.sort( (a, b) => a.hierarki - b.hierarki diff --git a/prisma/seed_assets.ts b/prisma/seed_assets.ts index 0af35add..a0922c67 100644 --- a/prisma/seed_assets.ts +++ b/prisma/seed_assets.ts @@ -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 diff --git a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx index 842ccb3c..9ac0742b 100644 --- a/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/kategori-berita/page.tsx @@ -102,8 +102,10 @@ function ListKategoriBerita({ search }: { search: string }) { {/* Desktop Table */} - - + +
diff --git a/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx index ab869839..97dc4d11 100644 --- a/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx +++ b/src/app/admin/(dashboard)/desa/berita/list-berita/page.tsx @@ -79,8 +79,10 @@ function ListBerita({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Judul diff --git a/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx b/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx index 0d5facf9..09a24742 100644 --- a/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx +++ b/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx @@ -85,8 +85,10 @@ function ListFoto({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Judul Foto diff --git a/src/app/admin/(dashboard)/desa/gallery/video/page.tsx b/src/app/admin/(dashboard)/desa/gallery/video/page.tsx index 8b5d81b4..80c297bb 100644 --- a/src/app/admin/(dashboard)/desa/gallery/video/page.tsx +++ b/src/app/admin/(dashboard)/desa/gallery/video/page.tsx @@ -87,66 +87,66 @@ function ListVideo({ search }: { search: string }) { {/* Desktop Table */} - - -
- - - Judul Video - Tanggal - Deskripsi - Aksi - - - - {filteredData.length > 0 ? ( - filteredData.map((item) => ( - - - - {item.name} - - - - - {new Date(item.createdAt).toLocaleDateString('id-ID', { - day: 'numeric', - month: 'long', - year: 'numeric', - })} - - - - - - - - - - )) - ) : ( - - -
- - Tidak ada video yang cocok - -
+ +
+ + + Judul Video + Tanggal + Deskripsi + Aksi + + + + {filteredData.length > 0 ? ( + filteredData.map((item) => ( + + + + {item.name} + + + + + {new Date(item.createdAt).toLocaleDateString('id-ID', { + day: 'numeric', + month: 'long', + year: 'numeric', + })} + + + + + + + - )} - -
-
+ )) + ) : ( + + +
+ + Tidak ada video yang cocok + +
+
+
+ )} + + {/* Mobile Cards */} diff --git a/src/app/admin/(dashboard)/desa/layanan/ajukan_permohonan/page.tsx b/src/app/admin/(dashboard)/desa/layanan/ajukan_permohonan/page.tsx index f9fcf6c8..d2a6e3d1 100644 --- a/src/app/admin/(dashboard)/desa/layanan/ajukan_permohonan/page.tsx +++ b/src/app/admin/(dashboard)/desa/layanan/ajukan_permohonan/page.tsx @@ -76,8 +76,10 @@ function ListAjukanPermohonan({ search }: { search: string }) { {/* Desktop Table */} - - + +
Nama diff --git a/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx b/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx index ac433f4d..8a67870a 100644 --- a/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx +++ b/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx @@ -99,7 +99,9 @@ function ListSuratKeterangan({ search }: { search: string }) { {/* Desktop Table */} -
+
diff --git a/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx b/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx index adf3c1af..591f8c3e 100644 --- a/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx +++ b/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx @@ -85,8 +85,10 @@ function ListPelayananTelunjukSakti({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/desa/penghargaan/page.tsx b/src/app/admin/(dashboard)/desa/penghargaan/page.tsx index a9f01192..fe7be296 100644 --- a/src/app/admin/(dashboard)/desa/penghargaan/page.tsx +++ b/src/app/admin/(dashboard)/desa/penghargaan/page.tsx @@ -81,8 +81,10 @@ function ListPenghargaan({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama diff --git a/src/app/admin/(dashboard)/desa/pengumuman/kategori-pengumuman/page.tsx b/src/app/admin/(dashboard)/desa/pengumuman/kategori-pengumuman/page.tsx index 6966cd97..3f364287 100644 --- a/src/app/admin/(dashboard)/desa/pengumuman/kategori-pengumuman/page.tsx +++ b/src/app/admin/(dashboard)/desa/pengumuman/kategori-pengumuman/page.tsx @@ -116,8 +116,10 @@ function ListKategoriPengumuman({ search }: { search: string }) { - -
+ +
diff --git a/src/app/admin/(dashboard)/desa/pengumuman/list-pengumuman/page.tsx b/src/app/admin/(dashboard)/desa/pengumuman/list-pengumuman/page.tsx index 42a77585..a309b68d 100644 --- a/src/app/admin/(dashboard)/desa/pengumuman/list-pengumuman/page.tsx +++ b/src/app/admin/(dashboard)/desa/pengumuman/list-pengumuman/page.tsx @@ -83,8 +83,10 @@ function ListPengumuman({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/desa/potensi/kategori-potensi/page.tsx b/src/app/admin/(dashboard)/desa/potensi/kategori-potensi/page.tsx index 824bcd7e..8f4af700 100644 --- a/src/app/admin/(dashboard)/desa/potensi/kategori-potensi/page.tsx +++ b/src/app/admin/(dashboard)/desa/potensi/kategori-potensi/page.tsx @@ -96,8 +96,10 @@ function ListKategoriPotensi({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/desa/potensi/list-potensi/page.tsx b/src/app/admin/(dashboard)/desa/potensi/list-potensi/page.tsx index dcbbb8f4..f2cb3d15 100644 --- a/src/app/admin/(dashboard)/desa/potensi/list-potensi/page.tsx +++ b/src/app/admin/(dashboard)/desa/potensi/list-potensi/page.tsx @@ -90,8 +90,10 @@ function ListPotensi({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/desa/profil/profil-perbekel-dari-masa-ke-masa/page.tsx b/src/app/admin/(dashboard)/desa/profil/profil-perbekel-dari-masa-ke-masa/page.tsx index c897bd63..7065da65 100644 --- a/src/app/admin/(dashboard)/desa/profil/profil-perbekel-dari-masa-ke-masa/page.tsx +++ b/src/app/admin/(dashboard)/desa/profil/profil-perbekel-dari-masa-ke-masa/page.tsx @@ -80,8 +80,10 @@ function ListPerbekelDariMasaKeMasa({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama Perbekel diff --git a/src/app/admin/(dashboard)/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/page.tsx b/src/app/admin/(dashboard)/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/page.tsx index 5015c2a4..7c4792d4 100644 --- a/src/app/admin/(dashboard)/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/PADesa-pendapatan-asli-desa/apbdesa/page.tsx @@ -98,7 +98,7 @@ function ListAPBDesa({ search }: { search: string }) { {/* Desktop Table */} - +
- +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop: Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
Daftar Ide Inovatif -
+
Nama diff --git a/src/app/admin/(dashboard)/inovasi/info-teknologi-tepat-guna/page.tsx b/src/app/admin/(dashboard)/inovasi/info-teknologi-tepat-guna/page.tsx index ef36c286..b5d391e1 100644 --- a/src/app/admin/(dashboard)/inovasi/info-teknologi-tepat-guna/page.tsx +++ b/src/app/admin/(dashboard)/inovasi/info-teknologi-tepat-guna/page.tsx @@ -83,7 +83,7 @@ function ListInfoTeknologiTepatGuna({ search }: { search: string }) { {/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
- +
{/* Desktop Table */} - -
+
diff --git a/src/app/admin/(dashboard)/keamanan/kontak-darurat/kontak-darurat-item/page.tsx b/src/app/admin/(dashboard)/keamanan/kontak-darurat/kontak-darurat-item/page.tsx index abdde084..4aaa5784 100644 --- a/src/app/admin/(dashboard)/keamanan/kontak-darurat/kontak-darurat-item/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/kontak-darurat/kontak-darurat-item/page.tsx @@ -93,7 +93,7 @@ function ListKontakItem({ search }: { search: string }) { {/* Desktop: Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
{/* Desktop Table */} - +
-
+
Judul diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/dokter-tenaga-medis/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/dokter-tenaga-medis/page.tsx index e7e2bb1e..28f3aba9 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/dokter-tenaga-medis/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/dokter-tenaga-medis/page.tsx @@ -81,8 +81,10 @@ function ListDokterTenagaMedis({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama Dokter diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx index 8a405c04..93e96eb7 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx @@ -170,8 +170,10 @@ function ListFasilitasKesehatan({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Fasilitas Kesehatan diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/tarif-layanan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/tarif-layanan/page.tsx index f32c05b1..93e71fd6 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/tarif-layanan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/tarif-layanan/page.tsx @@ -94,8 +94,10 @@ function ListTarifLayanan({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx index 72be2be4..73003da1 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx @@ -85,8 +85,10 @@ function ListJadwalKegiatan({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/penderita_penyakit/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/penderita_penyakit/page.tsx index d557225f..c27ed736 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/penderita_penyakit/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/penderita_penyakit/page.tsx @@ -147,8 +147,10 @@ function ListGrafikHasilKepuasanMasyarakat({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kelahiran/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kelahiran/page.tsx index 4e732d9e..10a6ce0a 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kelahiran/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kelahiran/page.tsx @@ -99,8 +99,10 @@ function ListKelahiran({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Nama diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kematian/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kematian/page.tsx index fc1d925a..91bf8b12 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kematian/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/kematian/page.tsx @@ -95,8 +95,10 @@ function ListKematian({ search }: { search: string }) { {/* Tabel untuk desktop */} - -
+ +
Nama diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx index 851b747a..a7e123dc 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx @@ -234,7 +234,7 @@ function GrafikPersentaseKelahiranKematian() { {/* Desktop: Table */} - +
diff --git a/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx b/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx index 11ae0268..55fa211f 100644 --- a/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx @@ -93,7 +93,9 @@ function ListInfoWabahPenyakit({ search }: { search: string }) { {/* Desktop Table */} -
+
Judul diff --git a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/edit/page.tsx b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/edit/page.tsx index 9244a2fc..e3459054 100644 --- a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/edit/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/edit/page.tsx @@ -159,8 +159,8 @@ function EditKontakDarurat() { setFormData(prev => ({ ...prev, whatsapp: e.target.value }))} - label="Whatsapp" - placeholder="Masukkan whatsapp" + label="Telepon" + placeholder="Masukkan telepon" required /> diff --git a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/page.tsx b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/page.tsx index 2ef5413a..ce9c9a32 100644 --- a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/[id]/page.tsx @@ -73,7 +73,7 @@ function DetailKontakDarurat() { - Whatsapp + Telepon {data.whatsapp || '-'} diff --git a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/create/page.tsx b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/create/page.tsx index aabfab53..9befb923 100644 --- a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/create/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/create/page.tsx @@ -120,8 +120,8 @@ function CreateKontakDarurat() { onChange={(val) => { kontakDaruratState.create.form.whatsapp = val.target.value; }} - label={Whatsapp} - placeholder="Masukkan whatsapp" + label={Telepon} + placeholder="Masukkan telepon" required /> diff --git a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx index 7c6d09e4..9c3fc7c4 100644 --- a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx @@ -83,8 +83,10 @@ function ListKontakDarurat({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Judul diff --git a/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx b/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx index 9704591f..a465616e 100644 --- a/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx @@ -87,8 +87,10 @@ function ListPenangananDarurat({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
Judul diff --git a/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx b/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx index 1731a2be..e64902ed 100644 --- a/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx @@ -87,31 +87,34 @@ function ListPosyandu({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
- Nama Posyandu - Nomor Posyandu - Deskripsi - Aksi + Nama Posyandu + Nomor Posyandu + Deskripsi + Aksi {filteredData.length > 0 ? ( filteredData.map((item) => ( - + {item.name} - + {item.nomor || '-'} - + - +
+ +
diff --git a/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx b/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx index 2d124640..9f3eb215 100644 --- a/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx @@ -82,8 +82,10 @@ function ListPuskesmas({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/landing-page/SDGs/page.tsx b/src/app/admin/(dashboard)/landing-page/SDGs/page.tsx index 14a04a97..bc0a1506 100644 --- a/src/app/admin/(dashboard)/landing-page/SDGs/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/SDGs/page.tsx @@ -74,8 +74,10 @@ function ListSdgsDesa({ search }: { search: string }) { {/* Desktop Table */} - -
+ +
diff --git a/src/app/admin/(dashboard)/landing-page/apbdes/page.tsx b/src/app/admin/(dashboard)/landing-page/apbdes/page.tsx index fcdaffed..bae2ebc0 100644 --- a/src/app/admin/(dashboard)/landing-page/apbdes/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/apbdes/page.tsx @@ -66,7 +66,7 @@ function ListAPBDes({ search }: { search: string }) { return ( {/* Desktop Table */} - + @@ -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%"> diff --git a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx index 9d065f85..3edd81bf 100644 --- a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/kategori-desa-anti-korupsi/page.tsx @@ -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> diff --git a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/list-desa-anti-korupsi/page.tsx b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/list-desa-anti-korupsi/page.tsx index a2bd6831..37b442bb 100644 --- a/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/list-desa-anti-korupsi/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/desa-anti-korupsi/list-desa-anti-korupsi/page.tsx @@ -83,7 +83,7 @@ function ListDesaAntiKorupsi({ search }: { search: string }) { </Group> {/* Desktop Table */} - <Box visibleFrom="md"> + <Box visibleFrom="md" style={{ overflowX: 'auto' }}> <Table striped highlightOnHover diff --git a/src/app/admin/(dashboard)/landing-page/indeks-kepuasan-masyarakat/responden/page.tsx b/src/app/admin/(dashboard)/landing-page/indeks-kepuasan-masyarakat/responden/page.tsx index 69b078c2..ed84f5f5 100644 --- a/src/app/admin/(dashboard)/landing-page/indeks-kepuasan-masyarakat/responden/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/indeks-kepuasan-masyarakat/responden/page.tsx @@ -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 diff --git a/src/app/admin/(dashboard)/landing-page/prestasi-desa/kategori-prestasi-desa/page.tsx b/src/app/admin/(dashboard)/landing-page/prestasi-desa/kategori-prestasi-desa/page.tsx index f8441752..32067162 100644 --- a/src/app/admin/(dashboard)/landing-page/prestasi-desa/kategori-prestasi-desa/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/prestasi-desa/kategori-prestasi-desa/page.tsx @@ -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> diff --git a/src/app/admin/(dashboard)/landing-page/prestasi-desa/list-prestasi-desa/page.tsx b/src/app/admin/(dashboard)/landing-page/prestasi-desa/list-prestasi-desa/page.tsx index 39824462..916875c7 100644 --- a/src/app/admin/(dashboard)/landing-page/prestasi-desa/list-prestasi-desa/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/prestasi-desa/list-prestasi-desa/page.tsx @@ -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> diff --git a/src/app/admin/(dashboard)/landing-page/profil/media-sosial/page.tsx b/src/app/admin/(dashboard)/landing-page/profil/media-sosial/page.tsx index 62a05e15..89ddc86d 100644 --- a/src/app/admin/(dashboard)/landing-page/profil/media-sosial/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/profil/media-sosial/page.tsx @@ -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%' }}> diff --git a/src/app/admin/(dashboard)/landing-page/profil/program-inovasi/page.tsx b/src/app/admin/(dashboard)/landing-page/profil/program-inovasi/page.tsx index 938afd30..b2c30db0 100644 --- a/src/app/admin/(dashboard)/landing-page/profil/program-inovasi/page.tsx +++ b/src/app/admin/(dashboard)/landing-page/profil/program-inovasi/page.tsx @@ -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"> diff --git a/src/app/admin/(dashboard)/lingkungan/data-lingkungan-desa/page.tsx b/src/app/admin/(dashboard)/lingkungan/data-lingkungan-desa/page.tsx index ac7f4510..0c9c125e 100644 --- a/src/app/admin/(dashboard)/lingkungan/data-lingkungan-desa/page.tsx +++ b/src/app/admin/(dashboard)/lingkungan/data-lingkungan-desa/page.tsx @@ -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> diff --git a/src/app/admin/(dashboard)/lingkungan/gotong-royong/kategori-kegiatan/page.tsx b/src/app/admin/(dashboard)/lingkungan/gotong-royong/kategori-kegiatan/page.tsx index 414c3273..b088302e 100644 --- a/src/app/admin/(dashboard)/lingkungan/gotong-royong/kategori-kegiatan/page.tsx +++ b/src/app/admin/(dashboard)/lingkungan/gotong-royong/kategori-kegiatan/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/lingkungan/gotong-royong/kegiatan-desa/page.tsx b/src/app/admin/(dashboard)/lingkungan/gotong-royong/kegiatan-desa/page.tsx index 6039332b..40b7f10f 100644 --- a/src/app/admin/(dashboard)/lingkungan/gotong-royong/kegiatan-desa/page.tsx +++ b/src/app/admin/(dashboard)/lingkungan/gotong-royong/kegiatan-desa/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/keterangan-bank-sampah-terdekat/page.tsx b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/keterangan-bank-sampah-terdekat/page.tsx index e4f363b0..a10ab2c3 100644 --- a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/keterangan-bank-sampah-terdekat/page.tsx +++ b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/keterangan-bank-sampah-terdekat/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/list-pengelolaan-sampah-bank-sampah/page.tsx b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/list-pengelolaan-sampah-bank-sampah/page.tsx index 1b2d09d7..a41d23f2 100644 --- a/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/list-pengelolaan-sampah-bank-sampah/page.tsx +++ b/src/app/admin/(dashboard)/lingkungan/pengelolaan-sampah-bank-sampah/list-pengelolaan-sampah-bank-sampah/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/beasiswa-pendaftar/page.tsx b/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/beasiswa-pendaftar/page.tsx index 8a56006f..293b62cf 100644 --- a/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/beasiswa-pendaftar/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/beasiswa-pendaftar/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/keunggulan-program/page.tsx b/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/keunggulan-program/page.tsx index e31f1f40..9d8fc2b6 100644 --- a/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/keunggulan-program/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/beasiswa-desa/keunggulan-program/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/info-sekolah/jenjang-pendidikan/page.tsx b/src/app/admin/(dashboard)/pendidikan/info-sekolah/jenjang-pendidikan/page.tsx index 6ac01e51..f257ed75 100644 --- a/src/app/admin/(dashboard)/pendidikan/info-sekolah/jenjang-pendidikan/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/info-sekolah/jenjang-pendidikan/page.tsx @@ -99,7 +99,7 @@ function ListJenjangPendidikan() { </Group> {/* Desktop Table */} - <Box visibleFrom="md"> + <Box visibleFrom="md" style={{ overflowX: 'auto' }}> <Table highlightOnHover miw={0} diff --git a/src/app/admin/(dashboard)/pendidikan/info-sekolah/lembaga/page.tsx b/src/app/admin/(dashboard)/pendidikan/info-sekolah/lembaga/page.tsx index 93765bb0..744fffde 100644 --- a/src/app/admin/(dashboard)/pendidikan/info-sekolah/lembaga/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/info-sekolah/lembaga/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/info-sekolah/pengajar/page.tsx b/src/app/admin/(dashboard)/pendidikan/info-sekolah/pengajar/page.tsx index 02f9cd36..97e4c4a4 100644 --- a/src/app/admin/(dashboard)/pendidikan/info-sekolah/pengajar/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/info-sekolah/pengajar/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/info-sekolah/siswa/page.tsx b/src/app/admin/(dashboard)/pendidikan/info-sekolah/siswa/page.tsx index 5301ba06..1dcc37be 100644 --- a/src/app/admin/(dashboard)/pendidikan/info-sekolah/siswa/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/info-sekolah/siswa/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/data-perpustakaan/page.tsx b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/data-perpustakaan/page.tsx index 5cd77208..d18f45e9 100644 --- a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/data-perpustakaan/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/data-perpustakaan/page.tsx @@ -86,7 +86,7 @@ function ListDataPerpustakaan({ search }: { search: string }) { </Group> {/* Desktop Table */} - <Box visibleFrom="md"> + <Box visibleFrom="md" style={{ overflowX: 'auto' }}> <Table striped highlightOnHover diff --git a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/kategori-buku/page.tsx b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/kategori-buku/page.tsx index 4d6f84bb..608a4a4e 100644 --- a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/kategori-buku/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/kategori-buku/page.tsx @@ -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} diff --git a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/peminjam/page.tsx b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/peminjam/page.tsx index f62201ec..42d08f6e 100644 --- a/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/peminjam/page.tsx +++ b/src/app/admin/(dashboard)/pendidikan/perpustakaan-digital/peminjam/page.tsx @@ -89,7 +89,7 @@ function ListPeminjamBuku({ search }: { search: string }) { {/* Desktop Table */} - +
{/* Desktop Table */} - + Daftar Responden diff --git a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx index 7c16dfb0..ee4988b9 100644 --- a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx +++ b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx @@ -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}> diff --git a/src/app/admin/(dashboard)/ppid/permohonan-keberatan-informasi-publik/page.tsx b/src/app/admin/(dashboard)/ppid/permohonan-keberatan-informasi-publik/page.tsx index 09b65e77..3ab5b9d4 100644 --- a/src/app/admin/(dashboard)/ppid/permohonan-keberatan-informasi-publik/page.tsx +++ b/src/app/admin/(dashboard)/ppid/permohonan-keberatan-informasi-publik/page.tsx @@ -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"> diff --git a/src/app/admin/(dashboard)/ppid/struktur-ppid/pegawai/page.tsx b/src/app/admin/(dashboard)/ppid/struktur-ppid/pegawai/page.tsx index 0b8d738d..24713aab 100644 --- a/src/app/admin/(dashboard)/ppid/struktur-ppid/pegawai/page.tsx +++ b/src/app/admin/(dashboard)/ppid/struktur-ppid/pegawai/page.tsx @@ -117,8 +117,10 @@ function ListPegawaiPPID({ 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} lh={1.4}> diff --git a/src/app/admin/(dashboard)/ppid/struktur-ppid/posisi-organisasi/page.tsx b/src/app/admin/(dashboard)/ppid/struktur-ppid/posisi-organisasi/page.tsx index 3db71a35..09f64047 100644 --- a/src/app/admin/(dashboard)/ppid/struktur-ppid/posisi-organisasi/page.tsx +++ b/src/app/admin/(dashboard)/ppid/struktur-ppid/posisi-organisasi/page.tsx @@ -79,8 +79,10 @@ function ListPosisiOrganisasiPPID({ 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}>Nama Posisi</TableTh> diff --git a/src/app/admin/(dashboard)/user&role/role/page.tsx b/src/app/admin/(dashboard)/user&role/role/page.tsx index b4439700..b026a692 100644 --- a/src/app/admin/(dashboard)/user&role/role/page.tsx +++ b/src/app/admin/(dashboard)/user&role/role/page.tsx @@ -99,7 +99,7 @@ function ListRole({ search }: { search: string }) { </Group> {/* Desktop Table */} - <Box visibleFrom="md"> + <Box visibleFrom="md" style={{ overflowX: 'auto' }}> <Table striped highlightOnHover diff --git a/src/app/admin/(dashboard)/user&role/user/page.tsx b/src/app/admin/(dashboard)/user&role/user/page.tsx index 0fa1ec94..1074e15c 100644 --- a/src/app/admin/(dashboard)/user&role/user/page.tsx +++ b/src/app/admin/(dashboard)/user&role/user/page.tsx @@ -147,7 +147,7 @@ function ListUser({ search }: { search: string }) { </Group> {/* Desktop Table */} - <Box visibleFrom="md"> + <Box visibleFrom="md" style={{ overflowX: 'auto' }}> <Table highlightOnHover miw={0} diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx index 86494b94..52ff293a 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx @@ -110,7 +110,9 @@ function Page() { <Title order={2} fw="bold">{state.findUnique.data.mythvsfact?.title} -
+
Mitos diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx index 9baabf4b..eb981540 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/[id]/page.tsx @@ -226,7 +226,9 @@ function Page() { Dokter & Tenaga Medis -
+
@@ -301,7 +303,9 @@ function Page() { Layanan & Tarif -
+
diff --git a/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/[id]/page.tsx index 7b79bfe8..e9f0456d 100644 --- a/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/[id]/page.tsx @@ -3,7 +3,7 @@ import kontakDarurat from '@/app/admin/(dashboard)/_state/kesehatan/kontak-darur import colors from '@/con/colors'; import { Box, Button, Group, Image, Paper, Skeleton, Stack, Text, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; -import { IconArrowBack, IconBrandWhatsapp } from '@tabler/icons-react'; +import { IconArrowBack, IconPhoneCall } from '@tabler/icons-react'; import { useParams, useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; @@ -63,7 +63,7 @@ function Page() { - Whatsapp + Telepon {data.whatsapp || '-'} @@ -97,14 +97,14 @@ function Page() { diff --git a/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/page.tsx b/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/page.tsx index 388c7724..daa92513 100644 --- a/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/kontak-darurat/page.tsx @@ -139,7 +139,7 @@ function Page() { }} >
- + - + {/* Desktop navbar (muncul mulai 992px ke atas) */} - +