Fix QC Kak Inno : tanggal 14 Oktober
Fitur Search bisa digunakan di 6 Menu, sisa 3 Menu Lagi
This commit is contained in:
@@ -4,7 +4,7 @@ import prisma from "@/lib/prisma";
|
||||
|
||||
export default async function searchFindMany(context: Context) {
|
||||
const { query, page = 1, limit = 10, type } = context.query as any;
|
||||
|
||||
|
||||
// Convert to numbers
|
||||
const pageNum = parseInt(String(page), 10) || 1;
|
||||
const limitNum = parseInt(String(limit), 10) || 10;
|
||||
@@ -304,6 +304,403 @@ export default async function searchFindMany(context: Context) {
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= LAYANAN DESA ========================================= //
|
||||
if (type === "pelayananSuratKeterangan") {
|
||||
const data = await prisma.pelayananSuratKeterangan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
if (type === "pelayananPerizinanBerusaha") {
|
||||
const data = await prisma.pelayananPerizinanBerusaha.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
if (type === "pelayananTelunjukSaktiDesa") {
|
||||
const data = await prisma.pelayananTelunjukSaktiDesa.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
if (type === "pelayananPendudukNonPermanen") {
|
||||
const data = await prisma.pelayananPendudukNonPermanen.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= PENGHARGAAN ========================================= //
|
||||
if (type === "penghargaan") {
|
||||
const data = await prisma.penghargaan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= MENU KESEHATAN ========================================= //
|
||||
// ========================================= POSYANDU ========================================= //
|
||||
if (type === "posyandu") {
|
||||
const data = await prisma.posyandu.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
// ========================================= DATA KESEHATAN WARGA ========================================= //
|
||||
// ========================================= FASILITAS KESEHATAN ========================================= //
|
||||
if (type === "fasilitasKesehatan") {
|
||||
const data = await prisma.fasilitasKesehatan.findMany({
|
||||
where: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
informasiumum: { fasilitas: { contains: query, mode: "insensitive" } },
|
||||
layananunggulan: { content: { contains: query, mode: "insensitive" } },
|
||||
dokterdantenagamedis: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
fasilitaspendukung: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prosedurpendaftaran: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
tarifdanlayanan: { layanan: { contains: query, mode: "insensitive" } },
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= JADWAL KEGIATAN ========================================= //
|
||||
if (type === "jadwalKegiatan") {
|
||||
const data = await prisma.jadwalKegiatan.findMany({
|
||||
where: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
informasijadwalkegiatan: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
deskripsijadwalkegiatan: {
|
||||
deskripsi: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
layananjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
syaratketentuanjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
dokumenjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
pendaftaranjadwalkegiatan: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= ARTIKEL KESEHATAN ========================================= //
|
||||
if (type === "artikelKesehatan") {
|
||||
const data = await prisma.artikelKesehatan.findMany({
|
||||
where: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
introduction: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
symptom: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prevention: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
firstaid: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
mythvsfact: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
doctorsign: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= PUSKESMAS ========================================= //
|
||||
if (type === "puskesmas") {
|
||||
const data = await prisma.puskesmas.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= PROGRAM KESEHATAN ========================================= //
|
||||
if (type === "programKesehatan") {
|
||||
const data = await prisma.programKesehatan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= PENANGANAN DARURAT ========================================= //
|
||||
if (type === "penangananDarurat") {
|
||||
const data = await prisma.penangananDarurat.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= KONTAK DARURAT ========================================= //
|
||||
if (type === "kontakDarurat") {
|
||||
const data = await prisma.kontakDarurat.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= INFO WABAH PENYAKIT ========================================= //
|
||||
if (type === "infoWabahPenyakit") {
|
||||
const data = await prisma.infoWabahPenyakit.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= MENU KEAMANAN ========================================= //
|
||||
// ========================================= KEAMANAN LINGKUNGAN ========================================= //
|
||||
if (type === "keamananLingkungan") {
|
||||
const data = await prisma.keamananLingkungan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= POLSEK TERDEKAT ========================================= //
|
||||
if (type === "polsekTerdekat") {
|
||||
const data = await prisma.polsekTerdekat.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= KONTAK DARURAT ========================================= //
|
||||
if (type === "kontakDaruratKeamanan") {
|
||||
const data = await prisma.kontakDaruratKeamanan.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= PENCEGAHAN KRIMINALITAS ========================================= //
|
||||
if (type === "pencegahanKriminalitas") {
|
||||
const data = await prisma.pencegahanKriminalitas.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= LAPORAN PUBLIK ========================================= //
|
||||
if (type === "laporanPublik") {
|
||||
const data = await prisma.laporanPublik.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= TIPS KEAMANAN ========================================= //
|
||||
if (type === "tipsKeamanan") {
|
||||
const data = await prisma.menuTipsKeamanan.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= MENU EKONOMI ========================================= //
|
||||
// ========================================= PASAR DESA ========================================= //
|
||||
if (type === "pasarDesa") {
|
||||
const data = await prisma.pasarDesa.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= LOWONGAN KERJA LOKAL ========================================= //
|
||||
if (type === "lowonganKerjaLokal") {
|
||||
const data = await prisma.lowonganPekerjaan.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ posisi: { contains: query, mode: "insensitive" } },
|
||||
{ namaPerusahaan: { contains: query, mode: "insensitive" } },
|
||||
{ lokasi: { contains: query, mode: "insensitive" } },
|
||||
{ tipePekerjaan: { contains: query, mode: "insensitive" } },
|
||||
{ gaji: { contains: query, mode: "insensitive" } },
|
||||
{ deskripsi: { contains: query, mode: "insensitive" } },
|
||||
{ kualifikasi: { contains: query, mode: "insensitive" } },
|
||||
{ notelp: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
// ========================================= STRUKTUR ORGANISASI ========================================= //
|
||||
if (type === "strukturOrganisasi") {
|
||||
const data = await prisma.strukturBumDes.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ PosisiOrganisasiBumDes: { nama: { contains: query, mode: "insensitive" } } },
|
||||
{ PegawaiBumDes: { namaLengkap: { contains: query, mode: "insensitive" } } },
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= JUMLAH PENDUDUK USIA KERJA YANG MENGANGGUR ========================================= //
|
||||
if (type === "jumlahPendudukUsiaKerjaYangMenganggurUsia") {
|
||||
const data = await prisma.grafikMenganggurBerdasarkanUsia.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ usia18_25: { contains: query, mode: "insensitive" } },
|
||||
{ usia26_35: { contains: query, mode: "insensitive" } },
|
||||
{ usia36_45: { contains: query, mode: "insensitive" } },
|
||||
{ usia46_keatas: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= JUMLAH PENDUDUK USIA KERJA YANG MENGANGGUR ========================================= //
|
||||
if (type === "jumlahPendudukUsiaKerjaYangMenganggurPendidikan") {
|
||||
const data = await prisma.grafikMenganggurBerdasarkanPendidikan.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ SD: { contains: query, mode: "insensitive" } },
|
||||
{ SMP: { contains: query, mode: "insensitive" } },
|
||||
{ SMA: { contains: query, mode: "insensitive" } },
|
||||
{ D3: { contains: query, mode: "insensitive" } },
|
||||
{ S1: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= JUMLAH PENDUDUK MISKIN ========================================= //
|
||||
if (type === "jumlahPendudukMiskin") {
|
||||
const data = await prisma.grafikJumlahPendudukMiskin.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
// Convert year to string for partial matching
|
||||
...(isNaN(Number(query)) ? [] : [
|
||||
{ year: { equals: Number(query) } }
|
||||
]),
|
||||
// Convert totalPoorPopulation to string for partial matching
|
||||
...(isNaN(Number(query)) ? [] : [
|
||||
{ totalPoorPopulation: { equals: Number(query) } }
|
||||
])
|
||||
].filter(Boolean), // Remove any empty arrays from the spread
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
// ========================================= PROGRAM KEMISKINAN ========================================= //
|
||||
if (type === "programKemiskinan") {
|
||||
const data = await prisma.programKemiskinan.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ nama: { contains: query, mode: "insensitive" } },
|
||||
{ deskripsi: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
|
||||
// ========================================= SEKTOR UNGGULAN DESA ========================================= //
|
||||
if (type === "sektorUnggulanDesa") {
|
||||
const data = await prisma.sektorUnggulanDesa.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ description: { contains: query, mode: "insensitive" } }
|
||||
],
|
||||
},
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// ========================================= DEMOGRAFI PEKERJAAN ========================================= //
|
||||
if (type === "demografiPekerjaan") {
|
||||
const data = await prisma.dataDemografiPekerjaan.findMany({
|
||||
where: { pekerjaan: { contains: query, mode: "insensitive" } },
|
||||
skip,
|
||||
take: limitNum,
|
||||
});
|
||||
return { data, nextPage: data.length < limitNum ? null : pageNum + 1 };
|
||||
}
|
||||
|
||||
// 🌍 GLOBAL SEARCH — cari di beberapa modul sekaligus
|
||||
const [
|
||||
pejabatdesa,
|
||||
@@ -337,8 +734,32 @@ export default async function searchFindMany(context: Context) {
|
||||
pelayananSuratKeterangan,
|
||||
pelayananPerizinanBerusaha,
|
||||
pelayananTelunjukSaktiDesa,
|
||||
pelayananPendudukNonPermanent,
|
||||
penghargaan
|
||||
pelayananPendudukNonPermanen,
|
||||
penghargaan,
|
||||
posyandu,
|
||||
fasilitasKesehatan,
|
||||
jadwalKegiatan,
|
||||
artikelKesehatan,
|
||||
puskesmas,
|
||||
programKesehatan,
|
||||
penangananDarurat,
|
||||
kontakDarurat,
|
||||
infoWabahPenyakit,
|
||||
keamananLingkungan,
|
||||
polsekTerdekat,
|
||||
kontakDaruratKeamanan,
|
||||
pencegahanKriminalitas,
|
||||
laporanPublik,
|
||||
tipsKeamanan,
|
||||
pasarDesa,
|
||||
lowonganKerjaLokal,
|
||||
strukturOrganisasi,
|
||||
jumlahPendudukUsiaKerjaYangMenganggurUsia,
|
||||
jumlahPendudukUsiaKerjaYangMenganggurPendidikan,
|
||||
jumlahPendudukMiskin,
|
||||
programKemiskinan,
|
||||
sektorUnggulanDesa,
|
||||
demografiPekerjaan,
|
||||
] = await Promise.all([
|
||||
prisma.pejabatDesa.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
@@ -486,6 +907,197 @@ export default async function searchFindMany(context: Context) {
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.posyandu.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.fasilitasKesehatan.findMany({
|
||||
where: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
informasiumum: { fasilitas: { contains: query, mode: "insensitive" } },
|
||||
layananunggulan: { content: { contains: query, mode: "insensitive" } },
|
||||
dokterdantenagamedis: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
fasilitaspendukung: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prosedurpendaftaran: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
tarifdanlayanan: { layanan: { contains: query, mode: "insensitive" } },
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.jadwalKegiatan.findMany({
|
||||
where: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
informasijadwalkegiatan: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
deskripsijadwalkegiatan: {
|
||||
deskripsi: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
layananjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
syaratketentuanjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
dokumenjadwalkegiatan: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
pendaftaranjadwalkegiatan: {
|
||||
name: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.artikelKesehatan.findMany({
|
||||
where: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
introduction: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
symptom: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
prevention: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
firstaid: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
mythvsfact: {
|
||||
title: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
doctorsign: {
|
||||
content: { contains: query, mode: "insensitive" },
|
||||
},
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.puskesmas.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.programKesehatan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.penangananDarurat.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.kontakDarurat.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.infoWabahPenyakit.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.keamananLingkungan.findMany({
|
||||
where: { name: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.polsekTerdekat.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.kontakDaruratKeamanan.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.pencegahanKriminalitas.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.laporanPublik.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.menuTipsKeamanan.findMany({
|
||||
where: { judul: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.pasarDesa.findMany({
|
||||
where: { nama: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.lowonganPekerjaan.findMany({
|
||||
where: { posisi: { contains: query, mode: "insensitive" } },
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.strukturBumDes.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ PosisiOrganisasiBumDes: { nama: { contains: query, mode: "insensitive" } } },
|
||||
{ PegawaiBumDes: { namaLengkap: { contains: query, mode: "insensitive" } } },
|
||||
],
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.grafikMenganggurBerdasarkanUsia.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ usia18_25: { contains: query, mode: "insensitive" } },
|
||||
{ usia26_35: { contains: query, mode: "insensitive" } },
|
||||
{ usia36_45: { contains: query, mode: "insensitive" } },
|
||||
{ usia46_keatas: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.grafikMenganggurBerdasarkanPendidikan.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ SD: { contains: query, mode: "insensitive" } },
|
||||
{ SMP: { contains: query, mode: "insensitive" } },
|
||||
{ SMA: { contains: query, mode: "insensitive" } },
|
||||
{ D3: { contains: query, mode: "insensitive" } },
|
||||
{ S1: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.grafikJumlahPendudukMiskin.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
...(isNaN(Number(query)) ? [] : [
|
||||
{ year: { equals: Number(query) } },
|
||||
{ totalPoorPopulation: { equals: Number(query) } }
|
||||
])
|
||||
].filter(Boolean),
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.programKemiskinan.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ nama: { contains: query, mode: "insensitive" } },
|
||||
{ deskripsi: { contains: query, mode: "insensitive" } },
|
||||
],
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.sektorUnggulanDesa.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ name: { contains: query, mode: "insensitive" } },
|
||||
{ description: { contains: query, mode: "insensitive" } }
|
||||
],
|
||||
},
|
||||
take: limitNum,
|
||||
}),
|
||||
prisma.dataDemografiPekerjaan.findMany({
|
||||
where: {
|
||||
pekerjaan: { contains: query, mode: "insensitive" }
|
||||
},
|
||||
take: limitNum,
|
||||
})
|
||||
]);
|
||||
|
||||
return {
|
||||
@@ -527,11 +1139,48 @@ export default async function searchFindMany(context: Context) {
|
||||
...pengumuman.map((b) => ({ type: "pengumuman", ...b })),
|
||||
...galleryFoto.map((b) => ({ type: "galleryFoto", ...b })),
|
||||
...galleryVideo.map((b) => ({ type: "galleryVideo", ...b })),
|
||||
...pelayananSuratKeterangan.map((b) => ({ type: "pelayananSuratKeterangan", ...b })),
|
||||
...pelayananPerizinanBerusaha.map((b) => ({ type: "pelayananPerizinanBerusaha", ...b })),
|
||||
...pelayananTelunjukSaktiDesa.map((b) => ({ type: "pelayananTelunjukSaktiDesa", ...b })),
|
||||
...pelayananPendudukNonPermanent.map((b) => ({ type: "pelayananPendudukNonPermanent", ...b })),
|
||||
...pelayananSuratKeterangan.map((b) => ({
|
||||
type: "pelayananSuratKeterangan",
|
||||
...b,
|
||||
})),
|
||||
...pelayananPerizinanBerusaha.map((b) => ({
|
||||
type: "pelayananPerizinanBerusaha",
|
||||
...b,
|
||||
})),
|
||||
...pelayananTelunjukSaktiDesa.map((b) => ({
|
||||
type: "pelayananTelunjukSaktiDesa",
|
||||
...b,
|
||||
})),
|
||||
...pelayananPendudukNonPermanen.map((b) => ({
|
||||
type: "pelayananPendudukNonPermanen",
|
||||
...b,
|
||||
})),
|
||||
...penghargaan.map((b) => ({ type: "penghargaan", ...b })),
|
||||
...posyandu.map((b) => ({ type: "posyandu", ...b })),
|
||||
...fasilitasKesehatan.map((b) => ({ type: "fasilitasKesehatan", ...b })),
|
||||
...jadwalKegiatan.map((b) => ({ type: "jadwalKegiatan", ...b })),
|
||||
...artikelKesehatan.map((b) => ({ type: "artikelKesehatan", ...b })),
|
||||
...puskesmas.map((b) => ({ type: "puskesmas", ...b })),
|
||||
...programKesehatan.map((b) => ({ type: "programKesehatan", ...b })),
|
||||
...penangananDarurat.map((b) => ({ type: "penangananDarurat", ...b })),
|
||||
...kontakDarurat.map((b) => ({ type: "kontakDarurat", ...b })),
|
||||
...infoWabahPenyakit.map((b) => ({ type: "infoWabahPenyakit", ...b })),
|
||||
...keamananLingkungan.map((b) => ({ type: "keamananLingkungan", ...b })),
|
||||
...polsekTerdekat.map((b) => ({ type: "polsekTerdekat", ...b })),
|
||||
...kontakDaruratKeamanan.map((b) => ({ type: "kontakDaruratKeamanan", ...b })),
|
||||
...pencegahanKriminalitas.map((b) => ({ type: "pencegahanKriminalitas", ...b })),
|
||||
...laporanPublik.map((b) => ({ type: "laporanPublik", ...b })),
|
||||
...tipsKeamanan.map((b) => ({ type: "tipsKeamanan", ...b })),
|
||||
...pasarDesa.map((b) => ({ type: "pasarDesa", ...b })),
|
||||
...lowonganKerjaLokal.map((b) => ({ type: "lowonganKerjaLokal", ...b })),
|
||||
...strukturOrganisasi.map((b) => ({ type: "strukturOrganisasi", ...b })),
|
||||
...jumlahPendudukUsiaKerjaYangMenganggurUsia.map((b) => ({ type: "jumlahPendudukUsiaKerjaYangMenganggurUsia", ...b })),
|
||||
...jumlahPendudukUsiaKerjaYangMenganggurPendidikan.map((b) => ({ type: "jumlahPendudukUsiaKerjaYangMenganggurPendidikan", ...b })),
|
||||
...jumlahPendudukMiskin.map((b) => ({ type: "jumlahPendudukMiskin", ...b })),
|
||||
...programKemiskinan.map((b) => ({ type: "programKemiskinan", ...b })),
|
||||
...sektorUnggulanDesa.map((b) => ({ type: "sektorUnggulanDesa", ...b })),
|
||||
...demografiPekerjaan.map((b) => ({ type: "demografiPekerjaan", ...b })),
|
||||
|
||||
],
|
||||
nextPage: null, // bisa dibuat lebih kompleks kalau perlu
|
||||
};
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
'use client';
|
||||
import { proxy, subscribe } from 'valtio';
|
||||
import { proxy } from 'valtio';
|
||||
import { debounce } from 'lodash';
|
||||
import ApiFetch from '@/lib/api-fetch';
|
||||
|
||||
interface SearchResult {
|
||||
type?: string; // optional biar gak error
|
||||
type?: string;
|
||||
id: string | number;
|
||||
title?: string;
|
||||
[key: string]: any;
|
||||
@@ -21,36 +21,30 @@ const searchState = proxy({
|
||||
loading: false,
|
||||
|
||||
async fetch() {
|
||||
if (!searchState.query) return;
|
||||
if (!searchState.query) {
|
||||
searchState.results = [];
|
||||
return;
|
||||
}
|
||||
|
||||
searchState.loading = true;
|
||||
|
||||
try {
|
||||
const res = await ApiFetch.api.search.findMany.get({
|
||||
query: {
|
||||
query: searchState.query,
|
||||
page: searchState.page,
|
||||
limit: searchState.limit,
|
||||
type: searchState.type,
|
||||
},
|
||||
});
|
||||
const res = await ApiFetch.api.search.findMany.get({
|
||||
query: {
|
||||
query: searchState.query,
|
||||
page: searchState.page,
|
||||
limit: searchState.limit,
|
||||
type: searchState.type,
|
||||
},
|
||||
});
|
||||
|
||||
const data = (res.data?.data || []).map((item: any) => ({
|
||||
type: item.type ?? 'unknown', // pastikan selalu ada type
|
||||
...item,
|
||||
}));
|
||||
|
||||
if (searchState.page === 1) {
|
||||
searchState.results = data;
|
||||
} else {
|
||||
searchState.results.push(...data);
|
||||
}
|
||||
|
||||
searchState.nextPage = res.data?.nextPage || null;
|
||||
} catch (e) {
|
||||
console.error('Search fetch error:', e);
|
||||
} finally {
|
||||
searchState.loading = false;
|
||||
if (searchState.page === 1) {
|
||||
searchState.results = res.data?.data || [];
|
||||
} else {
|
||||
searchState.results.push(...(res.data?.data || []));
|
||||
}
|
||||
|
||||
searchState.nextPage = res.data?.nextPage || null;
|
||||
searchState.loading = false;
|
||||
},
|
||||
|
||||
async next() {
|
||||
@@ -60,15 +54,95 @@ const searchState = proxy({
|
||||
},
|
||||
});
|
||||
|
||||
// 🔁 Auto debounce search trigger
|
||||
const debouncedFetch = debounce(() => {
|
||||
if (!searchState.query) return;
|
||||
// 🕒 debounce-nya tetap kita export biar bisa dipanggil manual
|
||||
export const debouncedFetch = debounce(() => {
|
||||
searchState.page = 1;
|
||||
searchState.fetch();
|
||||
}, 500);
|
||||
|
||||
subscribe(searchState, () => {
|
||||
debouncedFetch();
|
||||
});
|
||||
|
||||
export default searchState;
|
||||
|
||||
|
||||
// 'use client';
|
||||
// import { proxy, subscribe } from 'valtio';
|
||||
// import { debounce } from 'lodash';
|
||||
// import ApiFetch from '@/lib/api-fetch';
|
||||
|
||||
// interface SearchResult {
|
||||
// type?: string;
|
||||
// id: string | number;
|
||||
// title?: string;
|
||||
// [key: string]: any;
|
||||
// }
|
||||
|
||||
// const searchState = proxy({
|
||||
// query: '',
|
||||
// page: 1,
|
||||
// limit: 10,
|
||||
// type: '', // kosong = global search
|
||||
// results: [] as SearchResult[],
|
||||
// nextPage: null as number | null,
|
||||
// loading: false,
|
||||
|
||||
// // --- fetch utama ---
|
||||
// async fetch() {
|
||||
// if (!searchState.query.trim()) {
|
||||
// // 🧹 kalau query kosong, kosongin data dan stop
|
||||
// searchState.results = [];
|
||||
// searchState.nextPage = null;
|
||||
// searchState.loading = false;
|
||||
// return;
|
||||
// }
|
||||
|
||||
// searchState.loading = true;
|
||||
|
||||
// try {
|
||||
// const res = await ApiFetch.api.search.findMany.get({
|
||||
// query: {
|
||||
// query: searchState.query,
|
||||
// page: searchState.page,
|
||||
// limit: searchState.limit,
|
||||
// type: searchState.type,
|
||||
// },
|
||||
// });
|
||||
|
||||
// const newData = res.data?.data || [];
|
||||
|
||||
// // Kalau ini page pertama, replace data
|
||||
// if (searchState.page === 1) {
|
||||
// searchState.results = newData;
|
||||
// } else {
|
||||
// // Kalau page berikutnya, append data
|
||||
// searchState.results = [...searchState.results, ...newData];
|
||||
// }
|
||||
|
||||
// searchState.nextPage = res.data?.nextPage || null;
|
||||
// } catch (err) {
|
||||
// console.error('Search fetch error:', err);
|
||||
// } finally {
|
||||
// searchState.loading = false;
|
||||
// }
|
||||
// },
|
||||
|
||||
// // --- load next page (infinite scroll) ---
|
||||
// async next() {
|
||||
// if (!searchState.nextPage || searchState.loading) return;
|
||||
// searchState.page = searchState.nextPage;
|
||||
// await searchState.fetch();
|
||||
// },
|
||||
// });
|
||||
|
||||
// // --- debounce agar gak fetch tiap ketik ---
|
||||
// const debouncedFetch = debounce(() => {
|
||||
// // reset pagination setiap query berubah
|
||||
// searchState.page = 1;
|
||||
// searchState.fetch();
|
||||
// }, 500);
|
||||
|
||||
// // --- auto trigger setiap query berubah ---
|
||||
// subscribe(searchState, () => {
|
||||
// // kalau query berubah, jalankan debounce fetch
|
||||
// debouncedFetch();
|
||||
// });
|
||||
|
||||
// export default searchState;
|
||||
|
||||
Reference in New Issue
Block a user