diff --git a/prisma/data/list-caraMemperolehInformasi.json b/prisma/data/list-caraMemperolehInformasi.json
new file mode 100644
index 00000000..c3f7fdad
--- /dev/null
+++ b/prisma/data/list-caraMemperolehInformasi.json
@@ -0,0 +1,5 @@
+[
+ {"name": "Melihat/Membaca/Mendengarkan/Mencatat"},
+ {"name": "Mendapatkan Salinan Informasi (Hardcopy)"},
+ {"name": "Mendapatkan Salinan Informasi (Softcopy)"}
+]
\ No newline at end of file
diff --git a/prisma/data/list-caraMemperolehSalinanInformasi.json b/prisma/data/list-caraMemperolehSalinanInformasi.json
new file mode 100644
index 00000000..6587f648
--- /dev/null
+++ b/prisma/data/list-caraMemperolehSalinanInformasi.json
@@ -0,0 +1,5 @@
+[
+ { "name": "Mengambil Langsung" },
+ { "name": "Dikirim Via Post" },
+ { "name": "Dikirim Via Email" }
+]
diff --git a/prisma/data/list-jenisInfromasi.json b/prisma/data/list-jenisInfromasi.json
new file mode 100644
index 00000000..393523e8
--- /dev/null
+++ b/prisma/data/list-jenisInfromasi.json
@@ -0,0 +1,6 @@
+[
+ { "name": "Keuangan Desa" },
+ { "name": "Pembangunan Desa" },
+ { "name": "Data Demografi" },
+ { "name": "Lainnya" }
+]
diff --git a/prisma/data/ppid/profile-ppid/profilePPid.json b/prisma/data/ppid/profile-ppid/profilePPid.json
new file mode 100644
index 00000000..04d71d97
--- /dev/null
+++ b/prisma/data/ppid/profile-ppid/profilePPid.json
@@ -0,0 +1,7 @@
+[
+ {"name": "
I.B Surya Prabhawa Manuaba, S.H., M.H.
"},
+ {"biodata" : "Biodata I.B Surya Prabhawa Manuaba, S.H., M.H., adalah Perbekel Darmasaba periode 2021-2027, seorang advokat, pendiri Mantra Legal Consultants & Advocates, serta aktif di bidang musik dan akademis. Dia menempuh pendidikan hukum di Universitas Udayana dan Universitas Mahasaraswati Denpasar, serta memiliki pengalaman luas di berbagai organisasi dan kepemimpinan.
"},
+ {"riwayat" : "Riwayat Karir 2021 - 2027: Perbekel Desa Darmasaba 2015 - Sekarang: Founder & Managing Director Mantra Legal Consultants & Advocates 2020 - Sekarang: Founder Ugawa Record Music Studio 2010 - 2016: Dosen Fakultas Hukum Universitas Mahasaraswati Denpasar "},
+ {"pengalaman" : "Pengalaman Organisasi 1996 – 1997: Ketua OSIS SMP Negeri 1 Abiansemal 1999 – 2000: Ketua OSIS SMA Negeri 1 Mengwi 2008 – 2009: Ketua BEM Universitas Mahasaraswati Denpasar 2008 – 2010: Ketua Sekaa Taruna Sila Dharma, Banjar Tengah, Desa Adat Tegal, Darmasaba 2020 – Sekarang: Pengurus Young Lawyer Committee Peradi Denpasar 2021 – Sekarang: Dewan Kehormatan Himpunan Pengusaha Muda Indonesia (HIPMI) Badung 2023 – 2028: Komite Tetap Advokasi – Bidang Hukum dan Regulasi Kamar Dagang dan Industri Badung "},
+ {"unggulan" : "Program Kerja Unggulan Pemberdayaan Ekonomi dan UMKM Pelatihan dan pendampingan UMKM lokal Program bantuan modal usaha bagi pelaku usaha kecil Digitalisasi UMKM untuk meningkatkan pemasaran produk lokal Peningkatan Infrastruktur Desa Pembangunan dan perbaikan jalan desa Penyediaan fasilitas umum dan ruang terbuka hijau Optimalisasi layanan publik berbasis digital "}
+]
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 96e49b8c..34be5b4e 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -48,6 +48,39 @@ model AppMenuChild {
}
//========================================= MENU PPID ========================================= //
+// ========================================= VISI MISI PPID ========================================= //
+model VisiPPID {
+ id String @id @default(cuid())
+ content String
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+}
+
+model MisiPPID {
+ id String @id @default(cuid())
+ content String
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+}
+
+// ========================================= PROFILE PPID ========================================= //
+model ProfilePPID {
+ id String @id @default(cuid())
+ name String @unique
+ biodata String
+ riwayat String
+ pengalaman String
+ unggulan String
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+}
+
// ========================================= DAFTAR INFORMASI PUBLIK ========================================= //
model DaftarInformasiPublik {
id String @id @default(cuid())
@@ -61,7 +94,70 @@ model DaftarInformasiPublik {
isActive Boolean @default(true)
}
-//========================================= MENU PPID ========================================= //
+//=========================================PERMOHONAN INFORMASI PUBLIK========================= //
+model PermohonanInformasiPublik {
+ id String @id @default(cuid())
+ nomor Int @default(autoincrement())
+ name String
+ nik String
+ notelp String
+ alamat String
+ email String
+ jenisInformasiDiminta JenisInformasiDiminta? @relation(fields: [jenisInformasiDimintaId], references: [id])
+ jenisInformasiDimintaId String?
+ caraMemperolehInformasi CaraMemperolehInformasi? @relation(fields: [caraMemperolehInformasiId], references: [id])
+ caraMemperolehInformasiId String?
+ caraMemperolehSalinanInformasi CaraMemperolehSalinanInformasi? @relation(fields: [caraMemperolehSalinanInformasiId], references: [id])
+ caraMemperolehSalinanInformasiId String?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+}
+
+model JenisInformasiDiminta {
+ id String @id @default(cuid())
+ name String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+ PermohonanInformasiPublik PermohonanInformasiPublik[]
+}
+
+model CaraMemperolehInformasi {
+ id String @id @default(cuid())
+ name String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+ PermohonanInformasiPublik PermohonanInformasiPublik[]
+}
+
+model CaraMemperolehSalinanInformasi {
+ id String @id @default(cuid())
+ name String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+ PermohonanInformasiPublik PermohonanInformasiPublik[]
+}
+
+//=========================================PERMOHONAN INFORMASI KEBERATAN PUBLIK========================= //
+model FormulirPermohonanKeberatan {
+ id String @id @default(cuid())
+ name String
+ email String
+ notelp String
+ alasan String
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ deletedAt DateTime @default(now())
+ isActive Boolean @default(true)
+}
+
// ========================================= IKM ========================================= //
model IndeksKepuasanMasyarakat {
id Int @id @default(autoincrement())
diff --git a/prisma/seed.ts b/prisma/seed.ts
index 5f296d13..b334bc9e 100644
--- a/prisma/seed.ts
+++ b/prisma/seed.ts
@@ -1,8 +1,11 @@
+import prisma from '@/lib/prisma'
+import categoryPengumuman from './data/category-pengumuman.json'
+import katagoryBerita from './data/katagory-berita.json'
+import caraMemperolehInformasi from './data/list-caraMemperolehInformasi.json'
+import caraMemperolehSalinanInformasi from './data/list-caraMemperolehSalinanInformasi.json'
+import jenisInformasiDiminta from './data/list-jenisInfromasi.json'
import layanan from './data/list-layanan.json'
import potensi from './data/list-potensi.json'
-import katagoryBerita from './data/katagory-berita.json'
-import categoryPengumuman from './data/category-pengumuman.json'
-import prisma from '@/lib/prisma';
(async () => {
for (const l of layanan) {
await prisma.layanan.upsert({
@@ -67,6 +70,54 @@ import prisma from '@/lib/prisma';
}
console.log("category pengumuman success ...")
+
+ 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 ...")
+
+
+
})().then(() => prisma.$disconnect()).catch((e) => {
console.error(e)
prisma.$disconnect()
diff --git a/src/app/admin/(dashboard)/_state/desa/berita.ts b/src/app/admin/(dashboard)/_state/desa/berita.ts
index 817c5127..ea5bdfbf 100644
--- a/src/app/admin/(dashboard)/_state/desa/berita.ts
+++ b/src/app/admin/(dashboard)/_state/desa/berita.ts
@@ -87,4 +87,4 @@ const stateDashboardBerita = proxy({
berita,
});
-export default stateDashboardBerita;
+export default stateDashboardBerita;
\ No newline at end of file
diff --git a/src/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik.ts b/src/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik.ts
new file mode 100644
index 00000000..4487056f
--- /dev/null
+++ b/src/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik.ts
@@ -0,0 +1,120 @@
+import ApiFetch from "@/lib/api-fetch";
+import { Prisma } from "@prisma/client";
+import { toast } from "react-toastify";
+import { proxy } from "valtio";
+import { z } from "zod";
+
+const templateForm = z.object({
+ name: z.string().min(3, "Nama minimal 3 karakter"),
+ nik: z.string().min(3, "NIK minimal 3 karakter"),
+ notelp: z.string().min(3, "Nomor Telepon minimal 3 karakter"),
+ alamat: z.string().min(3, "Alamat minimal 3 karakter"),
+ email: z.string().min(3, "Email minimal 3 karakter"),
+ jenisInformasiDimintaId: z.string().nonempty(),
+ caraMemperolehInformasiId: z.string().nonempty(),
+ caraMemperolehSalinanInformasiId: z.string().nonempty(),
+})
+
+const jenisInformasiDiminta = proxy({
+ findMany: {
+ data: null as
+ | null
+ | Prisma.JenisInformasiDimintaGetPayload<{ omit: { isActive: true } }>[],
+ async load(){
+ const res = await ApiFetch.api.ppid.permohonaninformasipublik.jenisInformasi["find-many"].get();
+ if (res.status === 200) {
+ jenisInformasiDiminta.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+})
+
+const caraMemperolehInformasi = proxy({
+ findMany: {
+ data: null as
+ | null
+ | Prisma.CaraMemperolehInformasiGetPayload<{ omit: { isActive: true } }>[],
+ async load() {
+ const res = await ApiFetch.api.ppid.permohonaninformasipublik.memperolehInformasi["find-many"].get();
+ if (res.status === 200) {
+ caraMemperolehInformasi.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+})
+
+const caraMemperolehSalinanInformasi = proxy({
+ findMany: {
+ data: null as
+ | null
+ | Prisma.CaraMemperolehSalinanInformasiGetPayload<{ omit: { isActive: true } }>[],
+ async load() {
+ const res = await ApiFetch.api.ppid.permohonaninformasipublik.salinanInformasi["find-many"].get();
+ if (res.status === 200) {
+ caraMemperolehSalinanInformasi.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+})
+
+type PermohonanInformasiPublikForm = Prisma.PermohonanInformasiPublikGetPayload<{
+ select: {
+ name: true;
+ nik: true;
+ notelp: true;
+ alamat: true;
+ email: true;
+ jenisInformasiDimintaId: true;
+ caraMemperolehInformasiId: true;
+ caraMemperolehSalinanInformasiId: true;
+ };
+}>;
+
+const permohonanInformasiPublikForm = proxy({
+ create: {
+ form: {} as PermohonanInformasiPublikForm,
+ loading: false,
+ async create(){
+ const cek = templateForm.safeParse(permohonanInformasiPublikForm.create.form);
+ if(!cek.success) {
+ const err = `[${cek.error.issues
+ .map((v) => `${v.path.join(".")}`)
+ .join("\n")}] required`;
+ return toast.error(err);
+ }
+ try {
+ permohonanInformasiPublikForm.create.loading = true;
+ const res = await ApiFetch.api.ppid.permohonaninformasipublik["create"].post(permohonanInformasiPublikForm.create.form);
+ if (res.status === 200) {
+ permohonanInformasiPublikForm.findMany.load();
+ return toast.success("success create");
+ }
+ return toast.error("failed create");
+ } catch (error) {
+ console.log((error as Error).message);
+ } finally {
+ permohonanInformasiPublikForm.create.loading = false;
+ }
+ }
+ },
+ findMany: {
+ data: null as
+ | Prisma.PermohonanInformasiPublikGetPayload<{ omit: { isActive: true } }>[]
+ | null,
+ async load() {
+ const res = await ApiFetch.api.ppid.permohonaninformasipublik["find-many"].get();
+ if (res.status === 200) {
+ permohonanInformasiPublikForm.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+})
+
+const statePermohonanInformasi = proxy({
+ permohonanInformasiPublikForm,
+ jenisInformasiDiminta,
+ caraMemperolehInformasi,
+ caraMemperolehSalinanInformasi
+})
+
+export default statePermohonanInformasi;
diff --git a/src/app/admin/(dashboard)/_state/ppid/permohonan_keberatan_informasi_publik/permohonanKeberatanInformasi.ts b/src/app/admin/(dashboard)/_state/ppid/permohonan_keberatan_informasi_publik/permohonanKeberatanInformasi.ts
new file mode 100644
index 00000000..3e8f4f41
--- /dev/null
+++ b/src/app/admin/(dashboard)/_state/ppid/permohonan_keberatan_informasi_publik/permohonanKeberatanInformasi.ts
@@ -0,0 +1,68 @@
+import ApiFetch from "@/lib/api-fetch";
+import { Prisma } from "@prisma/client";
+import { toast } from "react-toastify";
+import { proxy } from "valtio";
+import { z } from "zod";
+
+const templateForm = z.object({
+ name: z.string().min(3, "Nama minimal 3 karakter"),
+ email: z.string().min(3, "Email minimal 3 karakter"),
+ notelp: z.string().min(3, "Nomor Telepon minimal 3 karakter"),
+ alasan: z.string().min(3, "Alasan minimal 3 karakter"),
+})
+
+type PermohonanKeberatanInformasiForm = Prisma.FormulirPermohonanKeberatanGetPayload<{
+ select: {
+ name: true;
+ email: true;
+ notelp: true;
+ alasan: true;
+ };
+}>;
+
+const permohonanKeberatanInformasiForm = proxy({
+ create: {
+ form: {} as PermohonanKeberatanInformasiForm,
+ loading: false,
+ async create(){
+ const cek = templateForm.safeParse(permohonanKeberatanInformasiForm.create.form);
+ if(!cek.success) {
+ const err = `[${cek.error.issues
+ .map((v) => `${v.path.join(".")}`)
+ .join("\n")}] required`;
+ return toast.error(err);
+ }
+ try {
+ permohonanKeberatanInformasiForm.create.loading = true;
+ const res = await ApiFetch.api.ppid.permohonankeberataninformasipublik["create"].post(permohonanKeberatanInformasiForm.create.form);
+ if (res.status === 200) {
+ permohonanKeberatanInformasiForm.findMany.load();
+ return toast.success("success create");
+ }
+ return toast.error("failed create");
+ } catch (error) {
+ console.log((error as Error).message);
+ } finally {
+ permohonanKeberatanInformasiForm.create.loading = false;
+ }
+ },
+ },
+ findMany: {
+ data: null as
+ | Prisma.FormulirPermohonanKeberatanGetPayload<{omit: {isActive: true}}>[]
+ | null,
+ async load() {
+ const res = await ApiFetch.api.ppid.permohonankeberataninformasipublik["find-many"].get();
+ if (res.status === 200) {
+ permohonanKeberatanInformasiForm.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+});
+
+const statePermohonanKeberatan = proxy({
+ permohonanKeberatanInformasiForm,
+})
+
+export default statePermohonanKeberatan;
+
diff --git a/src/app/admin/(dashboard)/_state/ppid/profile_ppid/profile_PPID.ts b/src/app/admin/(dashboard)/_state/ppid/profile_ppid/profile_PPID.ts
new file mode 100644
index 00000000..e35f6062
--- /dev/null
+++ b/src/app/admin/(dashboard)/_state/ppid/profile_ppid/profile_PPID.ts
@@ -0,0 +1,69 @@
+import ApiFetch from "@/lib/api-fetch";
+import { Prisma } from "@prisma/client";
+import { toast } from "react-toastify";
+import { proxy } from "valtio";
+import { z } from "zod";
+
+const templateForm = z.object({
+ name: z.string().min(3, "Nama minimal 3 karakter"),
+ biodata: z.string().min(3, "Biodata minimal 3 karakter"),
+ riwayat: z.string().min(3, "Riwayat minimal 3 karakter"),
+ pengalaman: z.string().min(3, "Pengalaman minimal 3 karakter"),
+ unggulan: z.string().min(3, "Unggulan minimal 3 karakter"),
+})
+
+type ProfilePPIDForm = Prisma.ProfilePPIDGetPayload<{
+ select: {
+ name: true;
+ biodata: true;
+ riwayat: true;
+ pengalaman: true;
+ unggulan: true;
+ }
+}>
+
+const profilePPID = proxy({
+ create: {
+ form: {} as ProfilePPIDForm,
+ loading: false,
+ async create() {
+ const cek = templateForm.safeParse(profilePPID.create.form);
+ if (!cek.success) {
+ const err = `[${cek.error.issues
+ .map((v) => `${v.path.join(".")}`)
+ .join("\n")}] required`;
+ return toast.error(err);
+ }
+ try {
+ profilePPID.create.loading = true;
+ const res = await ApiFetch.api.ppid.profileppid["create"].post(profilePPID.create.form);
+ if (res.status === 200) {
+ profilePPID.findMany.load();
+ return toast.success("success create");
+ }
+ return toast.error("failed create");
+ } catch (error) {
+ console.log((error as Error).message);
+ } finally {
+ profilePPID.create.loading = false;
+ }
+ }
+ },
+ findMany: {
+ data: null as
+ | Prisma.ProfilePPIDGetPayload<{omit: {isActive: true}}>[]
+ | null,
+ async load() {
+ const res = await ApiFetch.api.ppid.profileppid["find-many"].get();
+ if (res.status === 200) {
+ profilePPID.findMany.data = res.data?.data ?? [];
+ }
+ }
+ }
+})
+
+const stateProfilePPID = proxy({
+ profilePPID
+})
+
+export default stateProfilePPID;
\ No newline at end of file
diff --git a/src/app/admin/(dashboard)/desa/berita/page.tsx b/src/app/admin/(dashboard)/desa/berita/page.tsx
index 26c3df72..fd79b4d3 100644
--- a/src/app/admin/(dashboard)/desa/berita/page.tsx
+++ b/src/app/admin/(dashboard)/desa/berita/page.tsx
@@ -10,9 +10,9 @@ import { BeritaEditor } from './_com/BeritaEditor';
function Page() {
return (
-
-
+
+
);
diff --git a/src/app/admin/(dashboard)/ppid/_com/PPIDTextEditor.tsx b/src/app/admin/(dashboard)/ppid/_com/PPIDTextEditor.tsx
new file mode 100644
index 00000000..b540c2e2
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/_com/PPIDTextEditor.tsx
@@ -0,0 +1,94 @@
+'use client'
+import { Button, Stack } from '@mantine/core';
+import { Link, RichTextEditor } from '@mantine/tiptap';
+import Highlight from '@tiptap/extension-highlight';
+import SubScript from '@tiptap/extension-subscript';
+import Superscript from '@tiptap/extension-superscript';
+import TextAlign from '@tiptap/extension-text-align';
+import Underline from '@tiptap/extension-underline';
+import { useEditor } from '@tiptap/react';
+import StarterKit from '@tiptap/starter-kit';
+
+const content =
+ 'Welcome to Mantine rich text editor RichTextEditor component focuses on usability and is designed to be as simple as possible to bring a familiar editing experience to regular users. RichTextEditor is based on Tiptap.dev and supports all of its features:
General text formatting: bold , italic , underline , strike-through Headings (h1-h6) Sub and super scripts (<sup /> and <sub /> tags) Ordered and bullet lists Text align And all other extensions ';
+
+export function PPIDTextEditor({ onSubmit, onChange, showSubmit = true }: {
+ onSubmit?: (val: string) => void,
+ onChange: (val: string) => void,
+ showSubmit?: boolean }) {
+ const editor = useEditor({
+ extensions: [
+ StarterKit,
+ Underline,
+ Link,
+ Superscript,
+ SubScript,
+ Highlight,
+ TextAlign.configure({ types: ['heading', 'paragraph'] }),
+ ],
+ immediatelyRender: false,
+ content,
+ onUpdate : ({editor}) => {
+ onChange(editor.getHTML())
+ }
+ });
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {showSubmit && (
+ {
+ if (!editor) return
+ onSubmit?.(editor?.getHTML())
+ }}>Submit
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx b/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx
index 60d146dd..9ee3ca61 100644
--- a/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx
@@ -1,5 +1,5 @@
'use client'
-import { Box, Button, Group, SimpleGrid, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, TextInput, Title } from '@mantine/core';
+import { Box, Button, Group, Paper, SimpleGrid, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, TextInput, Title } from '@mantine/core';
import React from 'react';
import { useProxy } from 'valtio/utils';
import stateDaftarInformasiPublik from '../../_state/ppid/daftar_informasi_publik/daftarInformasiPublik';
@@ -20,35 +20,37 @@ function Page() {
-
- Daftar Informasi Publik Desa Darmasaba
- {
- daftarInformasi.create.form.jenisInformasi = val.target.value
- }}
- />
- {
- daftarInformasi.create.form.deskripsi = val
- }}
- />
- {
- daftarInformasi.create.form.tanggal = val.target.value
- }}
- />
-
- Submit
-
-
+
+
+ Daftar Informasi Publik Desa Darmasaba
+ {
+ daftarInformasi.create.form.jenisInformasi = val.target.value
+ }}
+ />
+ {
+ daftarInformasi.create.form.deskripsi = val
+ }}
+ />
+ {
+ daftarInformasi.create.form.tanggal = val.target.value
+ }}
+ />
+
+ Submit
+
+
+
@@ -64,46 +66,48 @@ function ListDaftarInformasi() {
listData.findMany.load()
}, [])
if (!listData.findMany.data) return
- {Array.from({length: 10}).map((v, k) => )}
+ {Array.from({ length: 10 }).map((v, k) => )}
- return
- List Daftar Informasi Publik Desa Darmasaba
-
-
-
-
- No
-
-
- Jenis Informasi
-
-
- Deskripsi
-
-
- Tanggal Publikasi
-
-
-
-
- {listData.findMany.data?.map((item) => (
-
- {item.nomor}
- {item.jenisInformasi}
-
- {item.tanggal}
-
- ))}
-
-
-
+ return
+
+ List Daftar Informasi Publik Desa Darmasaba
+
+
+
+
+ No
+
+
+ Jenis Informasi
+
+
+ Deskripsi
+
+
+ Tanggal Publikasi
+
+
+
+
+ {listData.findMany.data?.map((item) => (
+
+ {item.nomor}
+ {item.jenisInformasi}
+
+ {item.tanggal}
+
+ ))}
+
+
+
+
}
export default Page;
diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_jenis_kelamin_responden/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_jenis_kelamin_responden/page.tsx
index 93b30c06..18a8bf35 100644
--- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_jenis_kelamin_responden/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_jenis_kelamin_responden/page.tsx
@@ -2,7 +2,7 @@
'use client'
import stateGrafikBerdasarkanJenisKelamin from '@/app/admin/(dashboard)/_state/ppid/indeks_kepuasan_masyarakat/grafikBerdasarkanJenisKelamin';
import colors from '@/con/colors';
-import { Box, Button, Center, Flex, Stack, Text, TextInput, Title } from '@mantine/core';
+import { Box, Button, Center, Flex, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks';
import { useEffect, useState } from 'react';
import { Cell, Pie, PieChart } from 'recharts';
@@ -21,7 +21,7 @@ function GrafikBerdasarkanJenisKelamin() {
if (data && data.length > 0) {
const totalLaki = data.reduce((acc: number, cur: any) => acc + Number(cur.laki || 0), 0);
const totalPerempuan = data.reduce((acc: number, cur: any) => acc + Number(cur.perempuan || 0), 0);
-
+
setDonutData([
{ name: 'Laki-laki', value: totalLaki, color: colors['blue-button'], key: 'laki-laki' },
{ name: 'Perempuan', value: totalPerempuan, color: '#FF6384', key: 'perempuan' }
@@ -44,15 +44,15 @@ function GrafikBerdasarkanJenisKelamin() {
try {
// Simpan data baru
await grafikBerdasarkanJenisKelamin.create.create();
-
+
// Muat ulang data
await grafikBerdasarkanJenisKelamin.findMany.load();
-
+
// Update chart dengan data baru
if (grafikBerdasarkanJenisKelamin.findMany.data) {
updateChartData(grafikBerdasarkanJenisKelamin.findMany.data);
}
-
+
// Reset form setelah submit
grafikBerdasarkanJenisKelamin.create.form.laki = '';
grafikBerdasarkanJenisKelamin.create.form.perempuan = '';
@@ -64,72 +64,76 @@ function GrafikBerdasarkanJenisKelamin() {
return (
- Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik
- {
- grafikBerdasarkanJenisKelamin.create.form.laki = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanJenisKelamin.create.form.perempuan = val.currentTarget.value;
- }}
- />
-
- Submit
-
+
+ Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik
+ {
+ grafikBerdasarkanJenisKelamin.create.form.laki = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanJenisKelamin.create.form.perempuan = val.currentTarget.value;
+ }}
+ />
+
+ Submit
+
+
{/* Chart */}
-
- Grafik Berdasarkan Jenis Kelamin Responden
- {mounted && donutData.length > 0 && (
-
-
-
-
-
+
+ Grafik Berdasarkan Jenis Kelamin Responden
+ {mounted && donutData.length > 0 && (
+
+
+
- {donutData.map((entry, index) => (
- |
- ))}
-
-
-
-
-
- Perempuan: {donutData.find((entry) => entry.name === 'Perempuan')?.value}
-
-
-
- Laki-laki: {donutData.find((entry) => entry.name === 'Laki-laki')?.value}
-
-
- )}
-
+
+
+ {donutData.map((entry, index) => (
+ |
+ ))}
+
+
+
+
+
+ Perempuan: {donutData.find((entry) => entry.name === 'Perempuan')?.value}
+
+
+
+ Laki-laki: {donutData.find((entry) => entry.name === 'Laki-laki')?.value}
+
+
+ )}
+
+
);
diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_responden/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_responden/page.tsx
index f4d8651d..1a578cba 100644
--- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_responden/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_responden/page.tsx
@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import stateGrafikResponden from '@/app/admin/(dashboard)/_state/ppid/indeks_kepuasan_masyarakat/grafikBerdasarkanResponden';
import colors from '@/con/colors';
-import { Box, Button, Center, Flex, Stack, Text, TextInput, Title } from '@mantine/core';
+import { Box, Button, Center, Flex, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks';
import React, { useEffect, useState } from 'react';
import { PieChart, Pie, Cell } from 'recharts';
@@ -68,96 +68,103 @@ function GrafikBerdasarkanResponden() {
return (
- Grafik Berdasarkan Responden
- {
- grafikBerdasarkanResponden.create.form.sangatbaik = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanResponden.create.form.baik = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanResponden.create.form.kurangbaik = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanResponden.create.form.tidakbaik = val.currentTarget.value;
- }}
- />
-
- Submit
-
+
+
+ Grafik Berdasarkan Responden
+ {
+ grafikBerdasarkanResponden.create.form.sangatbaik = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanResponden.create.form.baik = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanResponden.create.form.kurangbaik = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanResponden.create.form.tidakbaik = val.currentTarget.value;
+ }}
+ />
+
+
+ Submit
+
+
+
+
{/* Chart */}
-
- Grafik Berdasarkan Responden
- {mounted && donutData.length > 0 && (
-
-
-
-
+
+ Grafik Berdasarkan Responden
+ {mounted && donutData.length > 0 && (
+
+
+
- {donutData.map((entry, index) => (
- |
- ))}
-
-
-
-
-
- Sangat Baik: {donutData.find((entry) => entry.name === 'sangatbaik')?.value}
-
-
-
- Baik: {donutData.find((entry) => entry.name === 'baik')?.value}
-
-
-
- Kurang Baik: {donutData.find((entry) => entry.name === 'kurangbaik')?.value}
-
-
-
- Tidak Baik: {donutData.find((entry) => entry.name === 'tidakbaik')?.value}
-
-
- )}
-
+
+ {donutData.map((entry, index) => (
+ |
+ ))}
+
+
+
+
+
+ Sangat Baik: {donutData.find((entry) => entry.name === 'sangatbaik')?.value}
+
+
+
+ Baik: {donutData.find((entry) => entry.name === 'baik')?.value}
+
+
+
+ Kurang Baik: {donutData.find((entry) => entry.name === 'kurangbaik')?.value}
+
+
+
+ Tidak Baik: {donutData.find((entry) => entry.name === 'tidakbaik')?.value}
+
+
+ )}
+
+
);
diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_umur/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_umur/page.tsx
index b85ed036..5e3d0e1f 100644
--- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_umur/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_berdasarkan_umur/page.tsx
@@ -1,7 +1,7 @@
'use client'
/* eslint-disable @typescript-eslint/no-explicit-any */
import colors from '@/con/colors';
-import { Box, Button, Center, Flex, Stack, Text, TextInput, Title } from '@mantine/core';
+import { Box, Button, Center, Flex, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
import React, { useEffect, useState } from 'react';
import { useProxy } from 'valtio/utils';
import stateGrafikBerdasarkanUmur from '@/app/admin/(dashboard)/_state/ppid/indeks_kepuasan_masyarakat/grafikBerdasarkanUmur';
@@ -37,117 +37,125 @@ function GrafikBerdasarakanUmur() {
fetchData();
}, []);
-const fetchData = async () => {
- await grafikBerdasarkanUmur.findMany.load();
- if (grafikBerdasarkanUmur.findMany.data) {
- updateChartData(grafikBerdasarkanUmur.findMany.data);
- }
-}
-
-const handleSubmit = async () => {
- try {
- await grafikBerdasarkanUmur.create.create();
+ const fetchData = async () => {
await grafikBerdasarkanUmur.findMany.load();
if (grafikBerdasarkanUmur.findMany.data) {
updateChartData(grafikBerdasarkanUmur.findMany.data);
}
- } catch (error) {
- console.error("Error submitting data:", error);
}
-}
+
+ const handleSubmit = async () => {
+ try {
+ await grafikBerdasarkanUmur.create.create();
+ await grafikBerdasarkanUmur.findMany.load();
+ if (grafikBerdasarkanUmur.findMany.data) {
+ updateChartData(grafikBerdasarkanUmur.findMany.data);
+ }
+ } catch (error) {
+ console.error("Error submitting data:", error);
+ }
+ }
return (
- Grafik Berdasarkan Umur Responden
- {
- grafikBerdasarkanUmur.create.form.remaja = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanUmur.create.form.dewasa = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanUmur.create.form.orangtua = val.currentTarget.value;
- }}
- />
- {
- grafikBerdasarkanUmur.create.form.lansia = val.currentTarget.value;
- }}
- />
-
- Submit
-
+
+
+ Grafik Berdasarkan Umur Responden
+ {
+ grafikBerdasarkanUmur.create.form.remaja = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanUmur.create.form.dewasa = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanUmur.create.form.orangtua = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikBerdasarkanUmur.create.form.lansia = val.currentTarget.value;
+ }}
+ />
+
+
+ Submit
+
+
+
+
{/* Chart */}
-
- Grafik Berdasarkan Umur Responden
- {mounted && donutData.length > 0 && (
-
-
-
-
+
+ Grafik Berdasarkan Umur Responden
+ {mounted && donutData.length > 0 && (
+
+
+
- {donutData.map((entry, index) => (
- |
- ))}
-
-
-
-
-
- 17 - 25 tahun: {donutData.find((entry) => entry.name === 'remaja')?.value}
-
-
-
- 26 - 45 tahun: {donutData.find((entry) => entry.name === 'dewasa')?.value}
-
-
-
- 46 - 60 tahun: {donutData.find((entry) => entry.name === 'orangtua')?.value}
-
-
-
- di atas 60 tahun: {donutData.find((entry) => entry.name === 'lansia')?.value}
-
-
- )}
-
+
+ {donutData.map((entry, index) => (
+ |
+ ))}
+
+
+
+
+
+ 17 - 25 tahun: {donutData.find((entry) => entry.name === 'remaja')?.value}
+
+
+
+ 26 - 45 tahun: {donutData.find((entry) => entry.name === 'dewasa')?.value}
+
+
+
+ 46 - 60 tahun: {donutData.find((entry) => entry.name === 'orangtua')?.value}
+
+
+
+ di atas 60 tahun: {donutData.find((entry) => entry.name === 'lansia')?.value}
+
+
+ )}
+
+
);
diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx
index 92596971..5ece0a34 100644
--- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/_ui/grafik_hasil_kepuasan_masyarakat/page.tsx
@@ -2,7 +2,7 @@
'use client'
import stateGrafikHasilKepuasanMasyarakat from '@/app/admin/(dashboard)/_state/ppid/indeks_kepuasan_masyarakat/grafikHasilKepuasan';
import colors from '@/con/colors';
-import { Box, Button, TextInput, Title } from '@mantine/core';
+import { Box, Button, Paper, Stack, TextInput, Title } from '@mantine/core';
import { useMediaQuery, useShallowEffect } from '@mantine/hooks';
import React, { useEffect, useState } from 'react';
import { Bar, BarChart, Legend, Tooltip, XAxis, YAxis } from 'recharts';
@@ -32,53 +32,61 @@ function GrafikHasilKepuasan() {
return (
- Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik
- {
- grafikHasilKepuasan.create.form.label = val.currentTarget.value;
- }}
- />
- {
- grafikHasilKepuasan.create.form.kepuasan = val.currentTarget.value;
- }}
- />
- {
- await grafikHasilKepuasan.create.create();
- await grafikHasilKepuasan.findMany.load();
- if (grafikHasilKepuasan.findMany.data) {
- setChartData(grafikHasilKepuasan.findMany.data);
- }
- }}
- >
- Submit
-
+
+
+ Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik
+ {
+ grafikHasilKepuasan.create.form.label = val.currentTarget.value;
+ }}
+ />
+ {
+ grafikHasilKepuasan.create.form.kepuasan = val.currentTarget.value;
+ }}
+ />
+ {
+ await grafikHasilKepuasan.create.create();
+ await grafikHasilKepuasan.findMany.load();
+ if (grafikHasilKepuasan.findMany.data) {
+ setChartData(grafikHasilKepuasan.findMany.data);
+ }
+ }}
+ >
+ Submit
+
+
+
{/* Chart */}
- Data Kepuasan Masyarakat
- {mounted && chartData.length > 0 && (
-
-
-
-
-
-
-
- )}
+
+
+ Data Kepuasan Masyarakat
+ {mounted && chartData.length > 0 && (
+
+
+
+
+
+
+
+ )}
+
+
diff --git a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx
new file mode 100644
index 00000000..90a1c6f7
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx
@@ -0,0 +1,41 @@
+import { Prisma } from '@prisma/client';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import statePermohonanInformasi from '../../_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik';
+import { useShallowEffect } from '@mantine/hooks';
+import { Group, Select, Skeleton } from '@mantine/core';
+
+function JenisInformasi({ onChange }: {
+ onChange: (value: Prisma.JenisInformasiDimintaGetPayload<{
+ select: {
+ id: true,
+ name: true
+ }
+ }>) => void
+}) {
+ const jenisInformasiState = useProxy(statePermohonanInformasi.jenisInformasiDiminta)
+ useShallowEffect(() => {
+ jenisInformasiState.findMany.load()
+ }, [])
+
+ if (!jenisInformasiState.findMany.data) return
+ return (
+
+ ({
+ value: item.id,
+ label: item.name
+ }))}
+ onChange={(v) => {
+ const data = jenisInformasiState.findMany.data?.find((item) => item.id === v)
+ if (!data) return
+ onChange(data)
+ }}
+ />
+
+ );
+}
+
+export default JenisInformasi;
diff --git a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehInformasi.tsx b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehInformasi.tsx
new file mode 100644
index 00000000..1bc91900
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehInformasi.tsx
@@ -0,0 +1,38 @@
+import { Group, Select } from '@mantine/core';
+import { useShallowEffect } from '@mantine/hooks';
+import { Prisma } from '@prisma/client';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import statePermohonanInformasi from '../../_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik';
+
+function MemperolehInformasi({ onChange }: {
+ onChange: (value: Prisma.CaraMemperolehInformasiGetPayload<{
+ select: {
+ id: true,
+ name: true
+ }
+ }>) => void
+}) {
+ const memperolehInformasiState = useProxy(statePermohonanInformasi.caraMemperolehInformasi)
+
+ useShallowEffect(() => {
+ memperolehInformasiState.findMany.load()
+ }, [])
+ return (
+
+ ({
+ value: item.id,
+ label: item.name
+ }))} onChange={(v) => {
+ const data = memperolehInformasiState.findMany.data?.find((item) => item.id === v)
+ if (!data) return
+ onChange(data)
+ }} />
+
+ );
+}
+
+export default MemperolehInformasi;
diff --git a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehSalinan.tsx b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehSalinan.tsx
new file mode 100644
index 00000000..b5dfc2b8
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehSalinan.tsx
@@ -0,0 +1,45 @@
+import { Group, Select, Skeleton } from '@mantine/core';
+import { useShallowEffect } from '@mantine/hooks';
+import { Prisma } from '@prisma/client';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import statePermohonanInformasi from '../../_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik';
+
+function MemperolehSalinan({ onChange }: {
+ onChange: (value: Prisma.CaraMemperolehSalinanInformasiGetPayload<{
+ select: {
+ id: true,
+ name: true
+ }
+ }>) => void
+}) {
+ const memperolehSalinanInformasiState = useProxy(statePermohonanInformasi.caraMemperolehSalinanInformasi)
+ useShallowEffect(() => {
+ memperolehSalinanInformasiState.findMany.load()
+ }, [])
+
+ if (!memperolehSalinanInformasiState.findMany.data) return
+ return (
+
+ ({
+ value: item.id,
+ label: item.name
+ }))}
+ onChange={(v) => {
+ if (!v) return
+ const selectedItem = memperolehSalinanInformasiState.findMany.data?.find(item => item.id === v)
+ if (selectedItem) {
+ onChange({
+ id: selectedItem.id,
+ name: selectedItem.name
+ })
+ }
+ }}
+ />
+
+ );
+}
+export default MemperolehSalinan;
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 d6988a3f..bab23af5 100644
--- a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/page.tsx
@@ -1,11 +1,115 @@
-import React from 'react';
+'use client'
+import { Box, Button, Group, Paper, SimpleGrid, Stack, TextInput, Title } from '@mantine/core';
+import { useProxy } from 'valtio/utils';
+import statePermohonanInformasi from '../../_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik';
+import JenisInformasi from './jenisInformasi';
+import MemperolehInformasi from './memperolehInformasi';
+import MemperolehSalinan from './memperolehSalinan';
+import colors from '@/con/colors';
function Page() {
return (
-
- permohonan-informasi-publik
-
+
+
+
+
+
+
+
);
}
-export default Page;
+function PermohonanInformasiPublikCreate() {
+ const permohonanInformasiPublikState = useProxy(statePermohonanInformasi)
+ const submitForms = () => {
+ // Tambahkan log untuk debugging
+ console.log("Form data sebelum submit:", {
+ name: permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.name,
+ nik: permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.nik,
+ notelp: permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.notelp,
+ alamat: permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.alamat,
+ email: permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.email,
+ jenisInformasiDimintaId: permohonanInformasiPublikState.jenisInformasiDiminta,
+ caraMemperolehInformasiId: permohonanInformasiPublikState.caraMemperolehInformasi,
+ caraMemperolehSalinanInformasiId: permohonanInformasiPublikState.caraMemperolehSalinanInformasi
+ });
+
+ if (permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.name &&
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.nik &&
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.notelp &&
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.alamat &&
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.email &&
+ permohonanInformasiPublikState.jenisInformasiDiminta &&
+ permohonanInformasiPublikState.caraMemperolehInformasi &&
+ permohonanInformasiPublikState.caraMemperolehSalinanInformasi) {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.create()
+ } else {
+ console.log("Validasi gagal, form tidak lengkap");
+ // Tampilkan pesan error ke pengguna di sini
+ }
+ }
+ return (
+
+
+
+ Permohonan Informasi Publik
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.name = val.target.value
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.nik = val.target.value
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.notelp = val.target.value
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.alamat = val.target.value
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.email = val.target.value
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.jenisInformasiDimintaId = val.id
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.caraMemperolehInformasiId = val.id
+ }}
+ />
+ {
+ permohonanInformasiPublikState.permohonanInformasiPublikForm.create.form.caraMemperolehSalinanInformasiId = val.id
+ }}
+ />
+
+ Submit
+
+
+
+
+ )
+}
+
+export default Page;
\ No newline at end of file
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 92caf14c..e416f772 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
@@ -1,11 +1,98 @@
+'use client'
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput, Title } from '@mantine/core';
import React from 'react';
+import { useProxy } from 'valtio/utils';
+import statePermohonanKeberatan from '../../_state/ppid/permohonan_keberatan_informasi_publik/permohonanKeberatanInformasi';
+import { useShallowEffect } from '@mantine/hooks';
function Page() {
return (
-
- permohonan-keberatan-informasi-publik
-
+
+
+
+
+
+
);
}
+function PermohonanKeberatanInformasiCreate() {
+ const state = useProxy(statePermohonanKeberatan.permohonanKeberatanInformasiForm)
+ const submit = () => {
+ if (state.create.form.name && state.create.form.email && state.create.form.notelp && state.create.form.alasan) {
+ state.create.create()
+ }
+ }
+ return (
+
+
+
+ Permohonan Keberatan Informasi Publik
+ {
+ state.create.form.name = val.target.value
+ }}
+ />
+ {
+ state.create.form.email = val.target.value
+ }}
+ />
+ {
+ state.create.form.notelp = val.target.value
+ }}
+ />
+ {
+ state.create.form.alasan = val.target.value
+ }}
+ />
+
+ Kirim Permohonan
+
+
+
+
+ )
+}
+
+function PermohonanKeberatanInformasiList() {
+ const listState = useProxy(statePermohonanKeberatan.permohonanKeberatanInformasiForm)
+ useShallowEffect(() => {
+ listState.findMany.load()
+ }, [])
+
+ if (!listState.findMany.data) return
+ {Array.from({ length: 10 }).map((v, k) => )}
+
+
+ return (
+
+
+
+ Permohonan Keberatan Informasi Publik
+ {listState.findMany.data?.map((item) => (
+
+ Nama: {item.name}
+ Email: {item.email}
+ Telepon: {item.notelp}
+ Alasan: {item.alasan}
+
+ ))}
+
+
+
+ )
+}
+
export default Page;
diff --git a/src/app/admin/(dashboard)/ppid/profile-ppid/biodata/page.tsx b/src/app/admin/(dashboard)/ppid/profile-ppid/biodata/page.tsx
new file mode 100644
index 00000000..bbb1c86b
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/profile-ppid/biodata/page.tsx
@@ -0,0 +1,24 @@
+'use client'
+import { Box, Text } from '@mantine/core';
+import React from 'react';
+
+import { useProxy } from 'valtio/utils';
+import stateProfilePPID from '../../../_state/ppid/profile_ppid/profile_PPID';
+import { PPIDEditor } from '../../_com/ppid_Editor';
+
+function Biodata() {
+ const biodataState = useProxy(stateProfilePPID.profilePPID)
+ return (
+ Biodata
+ {
+ biodataState.create.form.biodata = val
+ }}
+ />
+
+
+ );
+}
+
+export default Biodata;
diff --git a/src/app/admin/(dashboard)/ppid/profile-ppid/page.tsx b/src/app/admin/(dashboard)/ppid/profile-ppid/page.tsx
index 7f8eda91..9036584d 100644
--- a/src/app/admin/(dashboard)/ppid/profile-ppid/page.tsx
+++ b/src/app/admin/(dashboard)/ppid/profile-ppid/page.tsx
@@ -1,11 +1,102 @@
-import React from 'react';
+'use client'
+import colors from '@/con/colors';
+import { Box, Button, Group, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput, Title } from '@mantine/core';
+import Biodata from './biodata/page';
+import PengalamanOrganisasi from './pengalaman_organisasi/page';
+import RiwayatKarir from './riwayat_karir/page';
+import ProgramKerjaUnggulan from './program_kerja_unggulan/page';
+import { useProxy } from 'valtio/utils';
+import stateProfilePPID from '../../_state/ppid/profile_ppid/profile_PPID';
+import { useShallowEffect } from '@mantine/hooks';
+
function Page() {
return (
-
- profile-ppid
-
+
+
+
+
+
+
);
}
+function ProfileCreate() {
+ const allState = useProxy(stateProfilePPID)
+ const submit = () => {
+ if (
+ allState.profilePPID.create.form.name &&
+ allState.profilePPID.create.form.biodata &&
+ allState.profilePPID.create.form.riwayat &&
+ allState.profilePPID.create.form.pengalaman &&
+ allState.profilePPID.create.form.unggulan) {
+ allState.profilePPID.create.create()
+ }
+ }
+
+ return (
+
+
+ Profile PPID
+ Nama Perbekel}
+ placeholder="masukkan nama perbekel"
+ onChange={(val) => {
+ allState.profilePPID.create.form.name = val.currentTarget.value
+ }}
+ />
+
+
+
+
+
+ Submit
+
+
+
+ )
+}
+
+function ProfileList() {
+ const allList = useProxy(stateProfilePPID)
+ useShallowEffect(() => {
+ allList.profilePPID.findMany.load()
+ }, [])
+
+ if (!allList.profilePPID.findMany.data) return
+ {Array.from({ length: 10 }).map((v, k) => )}
+
+ return (
+
+
+ List Profile PPID
+ {allList.profilePPID.findMany.data?.map((item) => (
+
+
+ Nama
+
+
+
+ Biodata
+
+
+
+ Riwayat
+
+
+
+ Pengalaman
+
+
+
+ Program Kerja Unggulan
+
+
+
+ ))}
+
+
+ )
+}
+
export default Page;
diff --git a/src/app/admin/(dashboard)/ppid/profile-ppid/pengalaman_organisasi/page.tsx b/src/app/admin/(dashboard)/ppid/profile-ppid/pengalaman_organisasi/page.tsx
new file mode 100644
index 00000000..791a6e63
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/profile-ppid/pengalaman_organisasi/page.tsx
@@ -0,0 +1,22 @@
+'use client'
+import { Box, Text } from '@mantine/core';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import stateProfilePPID from '../../../_state/ppid/profile_ppid/profile_PPID';
+import { PPIDEditor } from '../../_com/ppid_Editor';
+
+function PengalamanOrganisasi() {
+ const pengalamanOrganisasiState = useProxy(stateProfilePPID.profilePPID)
+ return (
+ Pengalaman Organisasi
+ {
+ pengalamanOrganisasiState.create.form.pengalaman = val
+ }}
+ />
+
+ );
+}
+
+export default PengalamanOrganisasi;
diff --git a/src/app/admin/(dashboard)/ppid/profile-ppid/program_kerja_unggulan/page.tsx b/src/app/admin/(dashboard)/ppid/profile-ppid/program_kerja_unggulan/page.tsx
new file mode 100644
index 00000000..8c222071
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/profile-ppid/program_kerja_unggulan/page.tsx
@@ -0,0 +1,22 @@
+'use client'
+import { Box, Text } from '@mantine/core';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import stateProfilePPID from '../../../_state/ppid/profile_ppid/profile_PPID';
+import { PPIDEditor } from '../../_com/ppid_Editor';
+
+function ProgramKerjaUnggulan() {
+ const programKerjaUnggulanState = useProxy(stateProfilePPID.profilePPID)
+ return (
+ Program Kerja Unggulan
+ {
+ programKerjaUnggulanState.create.form.unggulan = val
+ }}
+ />
+
+ );
+}
+
+export default ProgramKerjaUnggulan;
diff --git a/src/app/admin/(dashboard)/ppid/profile-ppid/riwayat_karir/page.tsx b/src/app/admin/(dashboard)/ppid/profile-ppid/riwayat_karir/page.tsx
new file mode 100644
index 00000000..9c280e35
--- /dev/null
+++ b/src/app/admin/(dashboard)/ppid/profile-ppid/riwayat_karir/page.tsx
@@ -0,0 +1,30 @@
+'use client';
+
+import { Box, Text } from '@mantine/core';
+import React from 'react';
+import { useProxy } from 'valtio/utils';
+import dynamic from 'next/dynamic';
+import stateProfilePPID from '../../../_state/ppid/profile_ppid/profile_PPID';
+
+// ini penting
+const PPIDEditor = dynamic(() => import('../../_com/ppid_Editor').then(mod => mod.PPIDEditor), {
+ ssr: false, // disable server side rendering
+});
+
+function RiwayatKarir() {
+ const biodataState = useProxy(stateProfilePPID.profilePPID);
+
+ return (
+
+ Riwayat Karir
+ {
+ biodataState.create.form.riwayat = val;
+ }}
+ />
+
+ );
+}
+
+export default RiwayatKarir;
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/index.ts
index 2f43aba6..07df0252 100644
--- a/src/app/api/[[...slugs]]/_lib/ppid/index.ts
+++ b/src/app/api/[[...slugs]]/_lib/ppid/index.ts
@@ -4,14 +4,25 @@ import GrafikHasilKepuasanMasyarakat from "./ikm/grafik_hasil_kepuasan_masyaraka
import GrafikBerdasarkanJenisKelamin from "./ikm/grafik_berdasarkan_jenis_kelamin";
import GrafikBerdasarkanResponden from "./ikm/grafik_responden";
import GrafikBerdasarkanUmur from "./ikm/grafik_berdasarkan_umur";
+import PermohonanInformasiPublik from "./permohonan_informasi_publik";
+import PermohonanKeberatanInformasiPublik from "./permohonan_keberatan_informasi_publik";
+import ProfilePPID from "./profile_ppid";
+import VisiMisiPPID from "./visi_misi_ppid";
+
const PPID = new Elysia({ prefix: "/api/ppid", tags: ["PPID"] })
+.use(ProfilePPID)
.use(DaftarInformasiPublik)
.use(GrafikHasilKepuasanMasyarakat)
.use(GrafikBerdasarkanJenisKelamin)
.use(GrafikBerdasarkanResponden)
.use(GrafikBerdasarkanUmur)
+.use(PermohonanInformasiPublik)
+.use(PermohonanKeberatanInformasiPublik)
+.use(VisiMisiPPID)
+
+
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/create.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/create.ts
new file mode 100644
index 00000000..21932013
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/create.ts
@@ -0,0 +1,40 @@
+import prisma from "@/lib/prisma";
+import { Prisma } from "@prisma/client";
+import { Context } from "elysia";
+
+type FormCreate = Prisma.PermohonanInformasiPublikGetPayload<{
+ select: {
+ name: true;
+ nik: true;
+ email: true;
+ notelp: true;
+ alamat: true;
+ jenisInformasiDimintaId: true;
+ caraMemperolehInformasiId: true;
+ caraMemperolehSalinanInformasiId: true;
+ }
+}>
+export default async function permohonanInformasiPublikCreate(context: Context) {
+ const body = context.body as FormCreate;
+
+ await prisma.permohonanInformasiPublik.create({
+ data: {
+ name: body.name,
+ nik: body.nik,
+ email: body.email,
+ notelp: body.notelp,
+ alamat: body.alamat,
+ jenisInformasiDimintaId: body.jenisInformasiDimintaId,
+ caraMemperolehInformasiId: body.caraMemperolehInformasiId,
+ }
+ })
+
+ return {
+ success: true,
+ message: "Permohonan Informasi Publik Berhasil Dibuat",
+ data: {
+ ...body,
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/find-many.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/find-many.ts
new file mode 100644
index 00000000..dd3d6770
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/find-many.ts
@@ -0,0 +1,8 @@
+import prisma from "@/lib/prisma";
+
+export default async function permohonanInformasiPublikFindMany() {
+ const res = await prisma.permohonanInformasiPublik.findMany();
+ return {
+ data: res,
+ };
+}
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/index.ts
new file mode 100644
index 00000000..3a7a764b
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/index.ts
@@ -0,0 +1,29 @@
+import Elysia, { t } from "elysia";
+import permohonanInformasiPublikCreate from "./create";
+import permohonanInformasiPublikFindMany from "./find-many";
+import jenisInformasiFindMany from "./jenisInformasi";
+import memperolehInformasiFindMany from "./memperolehInformasi";
+import salinanInformasiFindMany from "./salinanInformasi";
+
+const PermohonanInformasiPublik = new Elysia({
+ prefix: "/permohonaninformasipublik",
+ tags: ["PPID/Permohonan Informasi Publik"]
+})
+ .get("/jenisInformasi/find-many", jenisInformasiFindMany)
+ .get("/memperolehInformasi/find-many", memperolehInformasiFindMany)
+ .get("/salinanInformasi/find-many", salinanInformasiFindMany)
+ .get("/find-many", permohonanInformasiPublikFindMany)
+ .post("/create", permohonanInformasiPublikCreate, {
+ body: t.Object({
+ name: t.String(),
+ nik: t.String(),
+ notelp: t.String(),
+ alamat: t.String(),
+ email: t.String(),
+ jenisInformasiDimintaId: t.Union([t.String(), t.Null()]),
+ caraMemperolehInformasiId: t.Union([t.String(), t.Null()]),
+ caraMemperolehSalinanInformasiId: t.Union([t.String(), t.Null()]),
+ }),
+ })
+
+export default PermohonanInformasiPublik
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/jenisInformasi.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/jenisInformasi.ts
new file mode 100644
index 00000000..f8498c1f
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/jenisInformasi.ts
@@ -0,0 +1,8 @@
+import prisma from "@/lib/prisma";
+
+export default async function jenisInformasiFindMany() {
+ const res = await prisma.jenisInformasiDiminta.findMany();
+ return {
+ data: res,
+ };
+}
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/memperolehInformasi.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/memperolehInformasi.ts
new file mode 100644
index 00000000..dfd6ae52
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/memperolehInformasi.ts
@@ -0,0 +1,8 @@
+import prisma from "@/lib/prisma";
+
+export default async function memperolehInformasiFindMany() {
+ const res = await prisma.caraMemperolehInformasi.findMany();
+ return {
+ data: res,
+ };
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/salinanInformasi.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/salinanInformasi.ts
new file mode 100644
index 00000000..5aa85646
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_informasi_publik/salinanInformasi.ts
@@ -0,0 +1,9 @@
+import prisma from "@/lib/prisma";
+
+export default async function salinanInformasiFindMany() {
+ const res = await prisma.caraMemperolehSalinanInformasi.findMany();
+ return {
+ data: res,
+ };
+}
+
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/create.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/create.ts
new file mode 100644
index 00000000..a6f70308
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/create.ts
@@ -0,0 +1,33 @@
+import prisma from "@/lib/prisma";
+import { Prisma } from "@prisma/client";
+import { Context } from "elysia";
+
+type FormCreate = Prisma.FormulirPermohonanKeberatanGetPayload<{
+ select: {
+ name: true;
+ email: true;
+ notelp: true;
+ alasan: true;
+ }
+}>
+
+export default async function permohonanKeberatanInformasiPublikCreate(context: Context) {
+ const body = context.body as FormCreate;
+
+ await prisma.formulirPermohonanKeberatan.create({
+ data: {
+ name: body.name,
+ email: body.email,
+ notelp: body.notelp,
+ alasan: body.alasan,
+ }
+ })
+
+ return {
+ success: true,
+ message: "Permohonan Keberatan Informasi Publik Berhasil Dibuat",
+ data: {
+ ...body,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/find-many.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/find-many.ts
new file mode 100644
index 00000000..bd4b6c4d
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/find-many.ts
@@ -0,0 +1,8 @@
+import prisma from "@/lib/prisma";
+
+export default async function permohonanKeberatanInformasiPublikFindMany() {
+ const res = await prisma.formulirPermohonanKeberatan.findMany();
+ return {
+ data: res,
+ };
+}
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/index.ts
new file mode 100644
index 00000000..4d77d9c7
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/permohonan_keberatan_informasi_publik/index.ts
@@ -0,0 +1,19 @@
+import Elysia, { t } from "elysia";
+import permohonanKeberatanInformasiPublikCreate from "./create";
+import permohonanKeberatanInformasiPublikFindMany from "./find-many";
+
+const PermohonanKeberatanInformasiPublik = new Elysia({
+ prefix: "/permohonankeberataninformasipublik",
+ tags: ["PPID/Permohonan Keberatan Informasi Publik"],
+})
+ .get("/find-many", permohonanKeberatanInformasiPublikFindMany)
+ .post("/create", permohonanKeberatanInformasiPublikCreate, {
+ body: t.Object({
+ name: t.String(),
+ email: t.String(),
+ notelp: t.String(),
+ alasan: t.String(),
+ }),
+ })
+
+export default PermohonanKeberatanInformasiPublik;
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/create.ts b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/create.ts
new file mode 100644
index 00000000..19a733a4
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/create.ts
@@ -0,0 +1,34 @@
+import prisma from "@/lib/prisma";
+import { Prisma } from "@prisma/client";
+import { Context } from "elysia";
+
+type FormCreate = Prisma.ProfilePPIDGetPayload<{
+ select: {
+ name: true;
+ biodata: true;
+ riwayat: true;
+ pengalaman: true;
+ unggulan: true;
+ }
+}>
+export default async function profilePPIDCreate(context: Context) {
+ const body = context.body as FormCreate;
+
+ await prisma.profilePPID.create({
+ data: {
+ name: body.name,
+ biodata: body.biodata,
+ riwayat: body.riwayat,
+ pengalaman: body.pengalaman,
+ unggulan: body.unggulan,
+ }
+ })
+
+ return {
+ success: true,
+ message: "Profile PPID Berhasil Dibuat",
+ data: {
+ ...body,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/find-many.ts b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/find-many.ts
new file mode 100644
index 00000000..1edb803f
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/find-many.ts
@@ -0,0 +1,9 @@
+import prisma from "@/lib/prisma";
+
+export default async function profilePPIDFindMany() {
+ const res = await prisma.profilePPID.findMany();
+ return{
+ data: res
+ }
+}
+
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/index.ts
new file mode 100644
index 00000000..88dbe815
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/profile_ppid/index.ts
@@ -0,0 +1,21 @@
+import Elysia, { t } from "elysia";
+import profilePPIDCreate from "./create";
+import profilePPIDFindMany from "./find-many";
+
+const ProfilePPID = new Elysia({
+ prefix: "/profileppid",
+ tags: ["PPID/Profile PPID"]
+})
+ .get("/find-many", profilePPIDFindMany)
+ .post("/create", profilePPIDCreate, {
+ body: t.Object({
+ name: t.String(),
+ biodata: t.String(),
+ riwayat: t.String(),
+ pengalaman: t.String(),
+ unggulan: t.String(),
+ })
+ })
+
+
+export default ProfilePPID;
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/index.ts
new file mode 100644
index 00000000..e41bf86d
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/index.ts
@@ -0,0 +1,7 @@
+import Elysia from "elysia";
+import MisiPPID from "./misi_ppid";
+
+const VisiMisiPPID = new Elysia({ prefix: "/visimisippid", tags: ["PPID/Visi Misi PPID"] })
+.use(MisiPPID)
+
+export default VisiMisiPPID
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/create.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/create.ts
new file mode 100644
index 00000000..2be2fb31
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/create.ts
@@ -0,0 +1,27 @@
+import prisma from "@/lib/prisma";
+import { Prisma } from "@prisma/client";
+import { Context } from "elysia";
+
+type FormCreate = Prisma.MisiPPIDGetPayload<{
+ select: {
+ content: true;
+ }
+}>
+
+export default async function misiPPIDCreate(context: Context) {
+ const body = context.body as FormCreate;
+
+ await prisma.misiPPID.create({
+ data: {
+ content: body.content,
+ }
+ })
+
+ return {
+ success: true,
+ message: "Misi PPID Berhasil Dibuat",
+ data: {
+ ...body,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/delete.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/delete.ts
new file mode 100644
index 00000000..c100c412
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/delete.ts
@@ -0,0 +1,17 @@
+import prisma from "@/lib/prisma";
+import { Context } from "elysia";
+
+export async function misiPPIDDelete(context: Context) {
+ const id = context.params.id
+
+ await prisma.misiPPID.delete({
+ where: {
+ id: id
+ }
+ })
+
+ return {
+ success: true,
+ message: "Misi PPID Berhasil Dihapus",
+ }
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/find-many.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/find-many.ts
new file mode 100644
index 00000000..c41181e6
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/find-many.ts
@@ -0,0 +1,8 @@
+import prisma from "@/lib/prisma";
+
+export async function misiPPIDFindMany() {
+ const res = await prisma.misiPPID.findMany();
+ return {
+ data: res,
+ };
+}
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/index.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/index.ts
new file mode 100644
index 00000000..8f8ad523
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/index.ts
@@ -0,0 +1,24 @@
+import Elysia, { t } from "elysia";
+import { misiPPIDFindMany } from "./find-many";
+import misiPPIDCreate from "./create";
+import { misiPPIDDelete } from "./delete";
+import misiPPIDUpdate from "./update";
+
+const MisiPPID = new Elysia({
+ prefix: "/misippid",
+ tags: ["PPID/Visi Misi PPID/ Misi PPID"],
+})
+.get("/find-many", misiPPIDFindMany)
+.post("/create", misiPPIDCreate, {
+ body: t.Object({
+ content: t.String(),
+ })
+})
+.put("/update/:id", misiPPIDUpdate, {
+ body: t.Object({
+ content: t.String(),
+ })
+})
+.delete("/delete/:id", misiPPIDDelete)
+
+export default MisiPPID;
\ No newline at end of file
diff --git a/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/update.ts b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/update.ts
new file mode 100644
index 00000000..ccc1319b
--- /dev/null
+++ b/src/app/api/[[...slugs]]/_lib/ppid/visi_misi_ppid/misi_ppid/update.ts
@@ -0,0 +1,29 @@
+import prisma from "@/lib/prisma";
+import { Prisma } from "@prisma/client";
+import { Context } from "elysia";
+
+type FormUpdate = Prisma.MisiPPIDGetPayload<{
+ select: {
+ content: true;
+ }
+}>
+
+export default async function misiPPIDUpdate(context: Context) {
+ const id = context.params.id
+ const body = context.body as FormUpdate;
+
+ await prisma.misiPPID.update({
+ where: { id: id },
+ data: {
+ content: body.content,
+ }
+ })
+
+ return {
+ success: true,
+ message: "Misi PPID Berhasil Diupdate",
+ data: {
+ ...body,
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/lib/api-fetch.ts b/src/lib/api-fetch.ts
index 5183771c..efae7f30 100644
--- a/src/lib/api-fetch.ts
+++ b/src/lib/api-fetch.ts
@@ -1,5 +1,7 @@
import { AppServer } from '@/app/api/[[...slugs]]/route'
import { treaty } from '@elysiajs/eden'
-const ApiFetch = treaty(process.env.NEXT_PUBLIC_WIBU_URL || 'localhost:3000')
+
+const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL || 'localhost:3000'
+const ApiFetch = treaty(BASE_URL)
export default ApiFetch
\ No newline at end of file