diff --git a/bun.lockb b/bun.lockb index 06c02320..519e1a0b 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 8ea1da92..e5e3d04e 100644 --- a/package.json +++ b/package.json @@ -48,14 +48,16 @@ "elysia": "^1.2.12", "embla-carousel-autoplay": "^8.5.2", "embla-carousel-react": "^7.1.0", + "form-data": "^4.0.2", "framer-motion": "^12.4.1", "get-port": "^7.1.0", "jotai": "^2.12.3", "lodash": "^4.17.21", "motion": "^12.4.1", - "nanoid": "^5.1.0", + "nanoid": "^5.1.5", "next": "15.1.6", "next-view-transitions": "^0.3.4", + "node-fetch": "^3.3.2", "p-limit": "^6.2.0", "prisma": "^6.3.1", "react": "^19.0.0", diff --git a/prisma/data/desa/profile/profil_perbekel.json b/prisma/data/desa/profile/profil_perbekel.json new file mode 100644 index 00000000..3f846693 --- /dev/null +++ b/prisma/data/desa/profile/profil_perbekel.json @@ -0,0 +1,9 @@ +[ + { + "id": "1", + "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.

", + "pengalaman": "", + "pengalamanOrganisasi": "", + "programUnggulan": "

Pemberdayaan Ekonomi dan UMKM

" + } +] \ No newline at end of file diff --git a/prisma/data/desa/profile/profile_desa.json b/prisma/data/desa/profile/profile_desa.json new file mode 100644 index 00000000..29ed4d8a --- /dev/null +++ b/prisma/data/desa/profile/profile_desa.json @@ -0,0 +1,11 @@ +[ + { + "id": "1", + "sejarah" : "

Asal – usul nama Darmasaba tertuang dalam lontar Usada Bali. Seperti di tulis dalam monografi Desa Darmasaba tahun 1980 silam, nama Darmasaba berkaitan dengan keturunan Danghyang Nirarta diceritakan, Sang kawi-wiku asal Daha (Jawa Timur) itu memiliki cucu bernama Ida Pedanda Sakti Manuaba yang tigggal di Desa Kendran Tegalalang Gianyar. Merasa tidak disenangi sang ayah, Ida Pedanda Sakti Manuaba pergi mengembara bersama dua orang pengiringnya. Pengembaraan sang pendeta sampai di pura Sarin Buana di Jimbaran. Saat mengadakan semedi di tempat ini sang pendeta melihat sinar api. Yang sangat jauh di utara. Timbul keinginan Ida Pedanda Manuaba untuk mengunjungi tempat itu. Sampailah sang Pedanda di pura Batan Bila Peguyangan. Disini Ida Pedanda Manuaba singgah menghadap Ida Pedanda Budha yang tinggal disana. Selanjutnya, kedua pendeta bersama-sama menuju arah utara dan singgah di Taman Cang Ana, sebuah taman milik Arya Lanang Blusung. Di tempat ini kedua pendeta bersama-sama melaksanakan semedi dan menetap untuk sementara waktu.

", + "visi" : "

Mewujudkan Desa Darmasaba yang sejahtera, unggul, religius, berbudaya, dan aman dengan berlandaskan Tri Hita Karana

", + "misi" : "", + "lambang" : "", + "maskot" : "

Pudak adalah bunga dari tanaman sejenis pandan (Pandanaceae). Bentuk bunga ini tersusun dalam beberapa lapisan, terbungkus oleh kelopak warna putih (semacam daun lonjong) yang ujungnya meruncing.

Bunga Pudak berwarna kuning dan akan terlihat jika kelopak atau pelepahnya telah mekar. Kekhasan dari bunga pudak, yaitu mempunyai aroma wangi yang semerbak nan lembut (tidak menyengat), dan dapat menebar keharuman sepanjang pagi atau pun sore hari. Tanaman ini dapat tumbuh di sepanjang pantai, aliran sungai, di atas batu-batu karang, dan juga di tanah ladang.

Dalam Kamus Jawa Kuna- Indonesia kata “Pudak” berarti bunga pandan atau Pandanus Moschatus (Mardiwarsito: 1981: 442). Selain itu bunga pudak juga dapat disebut ketaka atau ketaki (Mardiwarsito, 1981: 276). Sedangkan kata “Sategal” berasal dari kata dasar “Tegal” yang berarti ladang (Mardiwarsito, 1981: 593). Jadi Pudak Sategal dapat diartikan sebagai satu ladang luas yang dipenuhi bunga pudak dan menabar keharuman.

Pada sebuah kesempatan, Ida Pedanda Putu Pemaron menjelaskan mengenai makna dari istilah Pudak Sategal dengan sebuah analogi bahwa, sekuntum bunga pudak memiliki aroma wangi atau keharuman yang sangat kuat, apalagi jika satu ladang penuh bunga pudak, maka dapat dipastikan aroma keharumannya akan membumbung menyebar ke segala penjuru (Wawancara, 18 Mei 2019 di Geria Putra Mandara Kenderan, Tegallalang). “Pudak” ialah sebuah bunga yang memiliki aroma wangi atau keharuman yang semerbak, lembut, dan khas.

Garapan Tari Maskot Desa Darmasaba Sekar Pudak diwujudkan ke dalam bentuk tari kreasi yang ditarikan secara berkelompok dengan jumlah lima orang penari perempuan (putri).

Pemilihan penari perempuan dimaksudkan untuk mempresentasikan keindahan, keluwesan, dan keharuman dari bunga pudak. Sedangkan penetapan jumlah penari lima orang didasarkan atas pertimbangan kebutuhan koreografi agar dapat membentuk desain-desain komposisi lantai yang menarik dan dinamis, baik ketika ditarikan di area panggung yang luas atau pun area panggung yang kecil. Penyajian tari maskot ini dirancang dengan durasi waktu 9 menit.

", + "profilPerbekelId" : "1" + } +] \ No newline at end of file diff --git a/prisma/data/ppid/daftar-informasi-publik-desa-darmasaba/daftarInformasi.json b/prisma/data/ppid/daftar-informasi-publik-desa-darmasaba/daftarInformasi.json new file mode 100644 index 00000000..a3209314 --- /dev/null +++ b/prisma/data/ppid/daftar-informasi-publik-desa-darmasaba/daftarInformasi.json @@ -0,0 +1,8 @@ +[ + { + "id": "1", + "jenisInformasi": "Peraturan Desa", + "deskripsi": "Dokumen yang berisi kebijakan dan regulasi desa", + "tanggal": "15 Januari 2024" + } +] \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bf9ed2f0..64e716c2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -208,6 +208,34 @@ model GrafikBerdasarkanUmur { } // ========================================= MENU DESA ========================================= // +// ========================================= PROFILE DESA ========================================= // +model ProfileDesa { +id String @id @default(cuid()) +sejarah String @db.Text +visi String @db.Text +misi String @db.Text +lambang String @db.Text +maskot String @db.Text +ProfilPerbekel ProfilPerbekel? @relation(fields: [profilPerbekelId], references: [id]) +profilPerbekelId String? +createdAt DateTime @default(now()) +updatedAt DateTime @updatedAt +deletedAt DateTime @default(now()) +isActive Boolean @default(true) +} + +model ProfilPerbekel { +id String @id @default(cuid()) +biodata String @db.Text +pengalaman String @db.Text +pengalamanOrganisasi String @db.Text +programUnggulan String @db.Text +ProfileDesa ProfileDesa[] +createdAt DateTime @default(now()) +updatedAt DateTime @updatedAt +deletedAt DateTime @default(now()) +isActive Boolean @default(true) +} // ========================================= BERITA ========================================= // model Berita { id String @id @default(cuid()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 664de7b8..5efc1532 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -9,6 +9,8 @@ import potensi from './data/list-potensi.json' import profilePPID from './data/ppid/profile-ppid/profilePPid.json' import visiMisiPPID from './data/ppid/visi-misi-ppid/visimisiPPID.json' import dasarHukumPPID from './data/ppid/dasar-hukum-ppid/dasarhukumPPID.json' +import profileDesa from './data/desa/profile/profile_desa.json' +import profilePerbekel from './data/desa/profile/profil_perbekel.json' (async () => { for (const l of layanan) { await prisma.layanan.upsert({ @@ -181,6 +183,54 @@ import dasarHukumPPID from './data/ppid/dasar-hukum-ppid/dasarhukumPPID.json' } console.log("dasar hukum PPID success ...") + for (const v of profileDesa) { + await prisma.profileDesa.upsert({ + where: { + id: v.id, + }, + update: { + sejarah: v.sejarah, + visi: v.visi, + misi: v.misi, + lambang: v.lambang, + maskot: v.maskot, + profilPerbekelId: v.profilPerbekelId + }, + create: { + id: v.id, + sejarah: v.sejarah, + visi: v.visi, + misi: v.misi, + lambang: v.lambang, + maskot: v.maskot, + profilPerbekelId: v.profilPerbekelId + } + }) + } + console.log("profile desa success ...") + + for (const v of profilePerbekel) { + await prisma.profilPerbekel.upsert({ + where: { + id: v.id, + }, + update: { + biodata: v.biodata, + pengalaman: v.pengalaman, + pengalamanOrganisasi: v.pengalamanOrganisasi, + programUnggulan: v.programUnggulan + }, + create: { + id: v.id, + biodata: v.biodata, + pengalaman: v.pengalaman, + pengalamanOrganisasi: v.pengalamanOrganisasi, + programUnggulan: v.programUnggulan + } + }) + } + console.log("profile perbekel success ...") + })().then(() => prisma.$disconnect()).catch((e) => { console.error(e) prisma.$disconnect() diff --git a/public/assets/images/ppid/profile-ppid/1_1747129691675_perbekel.png b/public/assets/images/ppid/profile-ppid/1_1747289606214_perbekel.png similarity index 100% rename from public/assets/images/ppid/profile-ppid/1_1747129691675_perbekel.png rename to public/assets/images/ppid/profile-ppid/1_1747289606214_perbekel.png diff --git a/public/assets/images/ppid/profile-ppid/1_1747297419354_perbekel.png b/public/assets/images/ppid/profile-ppid/1_1747297419354_perbekel.png new file mode 100644 index 00000000..ed1cbd10 Binary files /dev/null and b/public/assets/images/ppid/profile-ppid/1_1747297419354_perbekel.png differ 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 index 4487056f..363998cf 100644 --- a/src/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik.ts +++ b/src/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik.ts @@ -56,6 +56,7 @@ const caraMemperolehSalinanInformasi = proxy({ } } }) +console.log(caraMemperolehSalinanInformasi) type PermohonanInformasiPublikForm = Prisma.PermohonanInformasiPublikGetPayload<{ select: { @@ -70,12 +71,12 @@ type PermohonanInformasiPublikForm = Prisma.PermohonanInformasiPublikGetPayload< }; }>; -const permohonanInformasiPublikForm = proxy({ +const statepermohonanInformasiPublik = proxy({ create: { form: {} as PermohonanInformasiPublikForm, loading: false, async create(){ - const cek = templateForm.safeParse(permohonanInformasiPublikForm.create.form); + const cek = templateForm.safeParse(statepermohonanInformasiPublik.create.form); if(!cek.success) { const err = `[${cek.error.issues .map((v) => `${v.path.join(".")}`) @@ -83,38 +84,42 @@ const permohonanInformasiPublikForm = proxy({ return toast.error(err); } try { - permohonanInformasiPublikForm.create.loading = true; - const res = await ApiFetch.api.ppid.permohonaninformasipublik["create"].post(permohonanInformasiPublikForm.create.form); + statepermohonanInformasiPublik.create.loading = true; + const res = await ApiFetch.api.ppid.permohonaninformasipublik["create"].post(statepermohonanInformasiPublik.create.form); if (res.status === 200) { - permohonanInformasiPublikForm.findMany.load(); + statepermohonanInformasiPublik.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; + statepermohonanInformasiPublik.create.loading = false; } } }, findMany: { data: null as - | Prisma.PermohonanInformasiPublikGetPayload<{ omit: { isActive: true } }>[] + | Prisma.PermohonanInformasiPublikGetPayload<{ include: { + caraMemperolehSalinanInformasi: true, + jenisInformasiDiminta: true, + caraMemperolehInformasi: true, + } }>[] | null, async load() { const res = await ApiFetch.api.ppid.permohonaninformasipublik["find-many"].get(); if (res.status === 200) { - permohonanInformasiPublikForm.findMany.data = res.data?.data ?? []; + statepermohonanInformasiPublik.findMany.data = res.data?.data ?? []; } } } }) -const statePermohonanInformasi = proxy({ - permohonanInformasiPublikForm, +const statepermohonanInformasiPublikForm = proxy({ + statepermohonanInformasiPublik, jenisInformasiDiminta, caraMemperolehInformasi, - caraMemperolehSalinanInformasi + caraMemperolehSalinanInformasi, }) -export default statePermohonanInformasi; +export default statepermohonanInformasiPublikForm; 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 index 3e8f4f41..0decf48a 100644 --- 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 @@ -20,12 +20,12 @@ type PermohonanKeberatanInformasiForm = Prisma.FormulirPermohonanKeberatanGetPay }; }>; -const permohonanKeberatanInformasiForm = proxy({ +const permohonanKeberatanInformasi = proxy({ create: { form: {} as PermohonanKeberatanInformasiForm, loading: false, async create(){ - const cek = templateForm.safeParse(permohonanKeberatanInformasiForm.create.form); + const cek = templateForm.safeParse(permohonanKeberatanInformasi.create.form); if(!cek.success) { const err = `[${cek.error.issues .map((v) => `${v.path.join(".")}`) @@ -33,17 +33,17 @@ const permohonanKeberatanInformasiForm = proxy({ return toast.error(err); } try { - permohonanKeberatanInformasiForm.create.loading = true; - const res = await ApiFetch.api.ppid.permohonankeberataninformasipublik["create"].post(permohonanKeberatanInformasiForm.create.form); + permohonanKeberatanInformasi.create.loading = true; + const res = await ApiFetch.api.ppid.permohonankeberataninformasipublik["create"].post(permohonanKeberatanInformasi.create.form); if (res.status === 200) { - permohonanKeberatanInformasiForm.findMany.load(); + permohonanKeberatanInformasi.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; + permohonanKeberatanInformasi.create.loading = false; } }, }, @@ -54,15 +54,11 @@ const permohonanKeberatanInformasiForm = proxy({ async load() { const res = await ApiFetch.api.ppid.permohonankeberataninformasipublik["find-many"].get(); if (res.status === 200) { - permohonanKeberatanInformasiForm.findMany.data = res.data?.data ?? []; + permohonanKeberatanInformasi.findMany.data = res.data?.data ?? []; } } } }); -const statePermohonanKeberatan = proxy({ - permohonanKeberatanInformasiForm, -}) - -export default statePermohonanKeberatan; +export default permohonanKeberatanInformasi; diff --git a/src/app/admin/(dashboard)/desa/_com/desaEditor.tsx b/src/app/admin/(dashboard)/desa/_com/desaEditor.tsx new file mode 100644 index 00000000..de60355a --- /dev/null +++ b/src/app/admin/(dashboard)/desa/_com/desaEditor.tsx @@ -0,0 +1,93 @@ +'use client' +import colors from '@/con/colors'; +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:

'; + +export function DesaEditor({showSubmit = true} : { + showSubmit: boolean +}) { + const editor = useEditor({ + extensions: [ + StarterKit, + Underline, + Link, + Superscript, + SubScript, + Highlight, + TextAlign.configure({ types: ['heading', 'paragraph'] }), + ], + immediatelyRender: false, + content, + }); + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {showSubmit && ( + + )} + + ); +} \ No newline at end of file diff --git a/src/app/admin/(dashboard)/desa/_com/desaEditorText.tsx b/src/app/admin/(dashboard)/desa/_com/desaEditorText.tsx new file mode 100644 index 00000000..3452d0a2 --- /dev/null +++ b/src/app/admin/(dashboard)/desa/_com/desaEditorText.tsx @@ -0,0 +1,95 @@ +'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'; + + +function DesaEditorText({ onSubmit, onChange, showSubmit = true, initialContent = '', }: { + onSubmit?: (val: string) => void, + onChange: (val: string) => void, + showSubmit?: boolean, + initialContent?: string }) { + const editor = useEditor({ + extensions: [ + StarterKit, + Underline, + Link, + Superscript, + SubScript, + Highlight, + TextAlign.configure({ types: ['heading', 'paragraph'] }), + ], + immediatelyRender: false, + content: initialContent, + onUpdate : ({editor}) => { + onChange(editor.getHTML()) + } + }); + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {showSubmit && ( + + )} + + ); +} + +export default DesaEditorText; diff --git a/src/app/admin/(dashboard)/desa/profile/page.tsx b/src/app/admin/(dashboard)/desa/profile/page.tsx index 216d6d1d..8f85b2fa 100644 --- a/src/app/admin/(dashboard)/desa/profile/page.tsx +++ b/src/app/admin/(dashboard)/desa/profile/page.tsx @@ -1,10 +1,52 @@ +import colors from '@/con/colors'; +import { Stack, Title, Tabs, TabsList, TabsTab, TabsPanel } from '@mantine/core'; import React from 'react'; +import SejarahDesa from './ui/sejarah_desa/page'; +import VisiMisiDesa from './ui/visi_misi_desa/page'; +import LambangDesa from './ui/lambang_desa/page'; +import MaskotDesa from './ui/maskot_desa/page'; +import ProfilePerbekel from './ui/profile_perbekel/page'; function Page() { return ( -
- Profile -
+ + Profile Desa + + + + Sejarah Desa + + + Visi Misi Desa + + + Lambang Desa + + + Maskot Desa + + + Profile Perbekel + + + + + + + + + + + + + + + + + + + + ); } diff --git a/src/app/admin/(dashboard)/desa/profile/ui/lambang_desa/page.tsx b/src/app/admin/(dashboard)/desa/profile/ui/lambang_desa/page.tsx new file mode 100644 index 00000000..ca48c832 --- /dev/null +++ b/src/app/admin/(dashboard)/desa/profile/ui/lambang_desa/page.tsx @@ -0,0 +1,39 @@ +import colors from '@/con/colors'; +import { Box, SimpleGrid, Paper, Stack, Title, Group, Button, Text } from '@mantine/core'; +import React from 'react'; +import { DesaEditor } from '../../../_com/desaEditor'; + +function LambangDesa() { + return ( + + + + + + Lambang Desa + Deskripsi Lambang Desa + + + + + + + + + + + List Lambang Desa + + + + + + ); +} + +export default LambangDesa; diff --git a/src/app/admin/(dashboard)/desa/profile/ui/maskot_desa/page.tsx b/src/app/admin/(dashboard)/desa/profile/ui/maskot_desa/page.tsx new file mode 100644 index 00000000..9fc4973b --- /dev/null +++ b/src/app/admin/(dashboard)/desa/profile/ui/maskot_desa/page.tsx @@ -0,0 +1,39 @@ +import colors from '@/con/colors'; +import { Box, SimpleGrid, Paper, Stack, Title, Group, Button, Text } from '@mantine/core'; +import React from 'react'; +import { DesaEditor } from '../../../_com/desaEditor'; + +function MaskotDesa() { + return ( + + + + + + Maskot Desa + Deskripsi Maskot Desa + + + + + + + + + + + List Maskot Desa + + + + + + ); +} + +export default MaskotDesa; diff --git a/src/app/admin/(dashboard)/desa/profile/ui/profile_perbekel/page.tsx b/src/app/admin/(dashboard)/desa/profile/ui/profile_perbekel/page.tsx new file mode 100644 index 00000000..702189dd --- /dev/null +++ b/src/app/admin/(dashboard)/desa/profile/ui/profile_perbekel/page.tsx @@ -0,0 +1,49 @@ +import colors from '@/con/colors'; +import { Box, SimpleGrid, Paper, Stack, Title, Group, Button, TextInput, Text } from '@mantine/core'; +import React from 'react'; +import { DesaEditor } from '../../../_com/desaEditor'; + +function ProfilePerbekel() { + return ( + + + + + + Profil Perbekel + + Biodata + + Pengalaman + + Pengalaman Organisasi + + Program Unggulan + + + + + + + + + + + List Profil Perbekel + + + + + + ); +} + +export default ProfilePerbekel; diff --git a/src/app/admin/(dashboard)/desa/profile/ui/sejarah_desa/page.tsx b/src/app/admin/(dashboard)/desa/profile/ui/sejarah_desa/page.tsx new file mode 100644 index 00000000..12fe1673 --- /dev/null +++ b/src/app/admin/(dashboard)/desa/profile/ui/sejarah_desa/page.tsx @@ -0,0 +1,38 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, SimpleGrid, Stack, Text, Title } from '@mantine/core'; +import { DesaEditor } from '../../../_com/desaEditor'; + +function SejarahDesa() { + return ( + + + + + + Sejarah Desa + Deskripsi Sejarah Desa + + + + + + + + + + + List Sejarah Desa + + + + + + ); +} + +export default SejarahDesa; diff --git a/src/app/admin/(dashboard)/desa/profile/ui/visi_misi_desa/page.tsx b/src/app/admin/(dashboard)/desa/profile/ui/visi_misi_desa/page.tsx new file mode 100644 index 00000000..f0ccf437 --- /dev/null +++ b/src/app/admin/(dashboard)/desa/profile/ui/visi_misi_desa/page.tsx @@ -0,0 +1,64 @@ +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, SimpleGrid, Stack, Text, Title } from '@mantine/core'; +import { DesaEditor } from '../../../_com/desaEditor'; + +function VisiMisiDesa() { + return ( + + + + + + Visi Desa + Deskripsi Visi Desa + + + + + + + + + + + List Visi Desa + + + + + + + + + Misi Desa + Deskripsi Misi Desa + + + + + + + + + + + List Misi Desa + + + + + + ); +} + +export default VisiMisiDesa; diff --git a/src/app/admin/(dashboard)/ppid/_com/ppid_Editor.tsx b/src/app/admin/(dashboard)/ppid/_com/ppid_Editor.tsx index 29954bc9..b261c75a 100644 --- a/src/app/admin/(dashboard)/ppid/_com/ppid_Editor.tsx +++ b/src/app/admin/(dashboard)/ppid/_com/ppid_Editor.tsx @@ -10,7 +10,7 @@ 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:

'; + '

Dokumen yang berisi kebijakan dan regulasi desa

'; export function PPIDEditor({ onSubmit, onChange, showSubmit = true }: { onSubmit?: (val: string) => void, 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 9ee3ca61..756426ac 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,11 +1,10 @@ 'use client' +import colors from '@/con/colors'; import { Box, Button, Group, Paper, SimpleGrid, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, TextInput, Title } from '@mantine/core'; -import React from 'react'; +import { useShallowEffect } from '@mantine/hooks'; import { useProxy } from 'valtio/utils'; import stateDaftarInformasiPublik from '../../_state/ppid/daftar_informasi_publik/daftarInformasiPublik'; -import { PPIDEditor } from '../_com/ppid_Editor'; -import colors from '@/con/colors'; -import { useShallowEffect } from '@mantine/hooks'; +import { PPIDTextEditor } from '../_com/PPIDTextEditor'; function Page() { const daftarInformasi = useProxy(stateDaftarInformasiPublik.daftarInformasi) @@ -30,7 +29,7 @@ function Page() { daftarInformasi.create.form.jenisInformasi = val.target.value }} /> - { daftarInformasi.create.form.deskripsi = val @@ -68,46 +67,50 @@ function ListDaftarInformasi() { if (!listData.findMany.data) return {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/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/page.tsx index f3c7cbbd..dbc9bdb3 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/page.tsx @@ -1,4 +1,4 @@ -import { Stack, Tabs, TabsList, TabsPanel, TabsTab } from '@mantine/core'; +import { Stack, Tabs, TabsList, TabsPanel, TabsTab, Title } from '@mantine/core'; import React from 'react'; import colors from '@/con/colors'; import GrafikHasilKepuasan from './_ui/grafik_hasil_kepuasan_masyarakat/page'; @@ -8,9 +8,10 @@ import GrafikBerdasarakanUmur from './_ui/grafik_berdasarkan_umur/page'; function Page() { return ( - - - + + Indeks Kepuasan Masyarakat (IKM) Desa Darmasaba + + Grafik Hasil Kepuasan Masyarakat Terhadap Pelayanan Publik diff --git a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx b/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx deleted file mode 100644 index 90a1c6f7..00000000 --- a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/jenisInformasi.tsx +++ /dev/null @@ -1,41 +0,0 @@ -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 = 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 deleted file mode 100644 index b5dfc2b8..00000000 --- a/src/app/admin/(dashboard)/ppid/permohonan-informasi-publik/memperolehSalinan.tsx +++ /dev/null @@ -1,45 +0,0 @@ -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) => { + const selectedData = data.find((item) => item.id === v); + if (selectedData) onChange(selectedData); + }} + /> + + ); +} diff --git a/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/memperoleh_informasi/memperolehInfromasi.tsx b/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/memperoleh_informasi/memperolehInfromasi.tsx new file mode 100644 index 00000000..e521caf0 --- /dev/null +++ b/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/memperoleh_informasi/memperolehInfromasi.tsx @@ -0,0 +1,46 @@ +import statePermohonanInformasi from '@/app/admin/(dashboard)/_state/ppid/permohonan_informasi_publik/permohonanInformasiPublik'; +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'; + +function MemperolehInformasi({ onChange }: { + onChange: (value: Prisma.CaraMemperolehInformasiGetPayload<{ + select: { + id: true, + name: true + } + }>) => void +}) { + const memperolehInformasiState = useProxy(statePermohonanInformasi) + + useShallowEffect(() => { + memperolehInformasiState.caraMemperolehInformasi.findMany.load() + }, []) + + if (!memperolehInformasiState.caraMemperolehInformasi.findMany.data) + return + + const data = memperolehInformasiState.caraMemperolehInformasi.findMany.data; + if (!data) return + + return ( + +