diff --git a/src/app/admin/(dashboard)/_state/keamanan/pencegahan-kriminalitas.ts b/src/app/admin/(dashboard)/_state/keamanan/pencegahan-kriminalitas.ts index e69de29b..3bdd2c0f 100644 --- a/src/app/admin/(dashboard)/_state/keamanan/pencegahan-kriminalitas.ts +++ b/src/app/admin/(dashboard)/_state/keamanan/pencegahan-kriminalitas.ts @@ -0,0 +1,314 @@ +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({ + pencegahanKriminalitas: z.object({ + programKeamanan: z.object({ + nama: z.string().min(1, "Nama minimal 1 karakter"), + deskripsi: z.string().min(1, "Deskripsi minimal 1 karakter"), + slug: z.string().min(1, "Slug minimal 1 karakter"), + }), + tipsKeamanan: z.object({ + judul: z.string().min(1, "Judul minimal 1 karakter"), + konten: z.string().min(1, "Konten minimal 1 karakter"), + slug: z.string().min(1, "Slug minimal 1 karakter"), + }), + videoKeamanan: z.object({ + judul: z.string().min(1, "Judul minimal 1 karakter"), + deskripsi: z.string().min(1, "Deskripsi minimal 1 karakter"), + videoUrl: z.string().min(1, "Video URL minimal 1 karakter"), + slug: z.string().min(1, "Slug minimal 1 karakter"), + }), + }), +}); + +const defaultForm = { + pencegahanKriminalitas: { + programKeamanan: { + nama: "", + deskripsi: "", + slug: "", + }, + tipsKeamanan: { + judul: "", + konten: "", + slug: "", + }, + videoKeamanan: { + judul: "", + deskripsi: "", + videoUrl: "", + slug: "", + }, + }, +}; + +const pencegahanKriminalitasState = proxy({ + create: { + form: { ...defaultForm }, + loading: false, + async create() { + const cek = templateForm.safeParse( + pencegahanKriminalitasState.create.form + ); + if (!cek.success) { + const err = `[${cek.error.issues + .map((v) => `${v.path.join(".")}`) + .join("\n")}] required`; + return toast.error(err); + } + try { + pencegahanKriminalitasState.create.loading = true; + const res = await ApiFetch.api.keamanan.pencegahankriminalitas[ + "create" + ].post(pencegahanKriminalitasState.create.form.pencegahanKriminalitas); + if (res.status === 200) { + pencegahanKriminalitasState.findMany.load(); + return toast.success("success create"); + } + console.log(res); + return toast.error("failed create"); + } catch (error) { + console.log((error as Error).message); + } finally { + pencegahanKriminalitasState.create.loading = false; + } + }, + }, + findMany: { + data: null as + | Prisma.PencegahanKriminalitasGetPayload<{ + include: { + programKeamanan: true; + tipsKeamanan: true; + videoKeamanan: true; + }; + }>[] + | null, + async load() { + const res = await ApiFetch.api.keamanan.pencegahankriminalitas[ + "find-many" + ].get(); + if (res.status === 200) { + pencegahanKriminalitasState.findMany.data = res.data?.data ?? []; + } + }, + }, + findUnique: { + data: null as Prisma.PencegahanKriminalitasGetPayload<{ + include: { + programKeamanan: true; + tipsKeamanan: true; + videoKeamanan: true; + }; + }> | null, + loading: false, + async load(id: string) { + try { + const res = await fetch(`/api/keamanan/pencegahankriminalitas/${id}`); + if (res.ok) { + const data = await res.json(); + pencegahanKriminalitasState.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch data", res.status, res.statusText); + pencegahanKriminalitasState.findUnique.data = null; + } + } catch (error) { + console.error("Error fetching data:", error); + pencegahanKriminalitasState.findUnique.data = null; + } + }, + }, + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + try { + pencegahanKriminalitasState.delete.loading = true; + const response = await fetch( + `/api/keamanan/pencegahankriminalitas/del/${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success( + result.message || "Pencegahan kriminalitas berhasil dihapus" + ); + await pencegahanKriminalitasState.findMany.load(); // refresh list + } else { + toast.error( + result?.message || "Gagal menghapus pencegahan kriminalitas" + ); + } + } catch (error) { + console.error("Gagal delete:", error); + toast.error("Terjadi kesalahan saat menghapus pencegahan kriminalitas"); + } finally { + pencegahanKriminalitasState.delete.loading = false; + } + }, + }, + update: { + id: "", + form: { ...defaultForm }, + loading: false, + + async load(id: string) { + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + try { + pencegahanKriminalitasState.update.loading = true; + const response = await fetch( + `/api/keamanan/pencegahankriminalitas/${id}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + } + ); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const result = await response.json(); + if (result?.success) { + const data = result.data; + pencegahanKriminalitasState.update.id = data.id; + pencegahanKriminalitasState.update.form = { + pencegahanKriminalitas: { + programKeamanan: { + nama: data.programKeamanan.nama, + deskripsi: data.programKeamanan.deskripsi, + slug: data.programKeamanan.slug, + }, + tipsKeamanan: { + judul: data.tipsKeamanan.judul, + konten: data.tipsKeamanan.konten, + slug: data.tipsKeamanan.slug, + }, + videoKeamanan: { + judul: data.videoKeamanan.judul, + deskripsi: data.videoKeamanan.deskripsi, + videoUrl: data.videoKeamanan.videoUrl, + slug: data.videoKeamanan.slug, + }, + }, + }; + return data; + } else { + throw new Error(result?.message || "Gagal memuat data"); + } + } catch (error) { + console.error("Gagal update:", error); + toast.error( + "Terjadi kesalahan saat mengupdate pencegahan kriminalitas" + ); + return null; + } + }, + + async update() { + const cek = templateForm.safeParse( + pencegahanKriminalitasState.update.form + ); + if (!cek.success) { + const err = `[${cek.error.issues + .map((v) => `${v.path.join(".")}`) + .join("\n")}] required`; + return toast.error(err); + } + + try { + pencegahanKriminalitasState.update.loading = true; + const response = await fetch( + `/api/keamanan/pencegahankriminalitas/${pencegahanKriminalitasState.update.id}`, + { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + pencegahanKriminalitas: { + programKeamanan: { + nama: pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.programKeamanan.nama, + deskripsi: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.programKeamanan.deskripsi, + slug: pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.programKeamanan.slug, + }, + tipsKeamanan: { + judul: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.tipsKeamanan.judul, + konten: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.tipsKeamanan.konten, + slug: pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.tipsKeamanan.slug, + }, + videoKeamanan: { + judul: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.videoKeamanan.judul, + deskripsi: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.videoKeamanan.deskripsi, + videoUrl: + pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.videoKeamanan.videoUrl, + slug: pencegahanKriminalitasState.update.form + .pencegahanKriminalitas.videoKeamanan.slug, + }, + }, + }), + } + ); + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + throw new Error( + errorData.message || `HTTP error! status: ${response.status}` + ); + } + const result = await response.json(); + if (result.success) { + toast.success("Berhasil update pencegahan kriminalitas"); + await pencegahanKriminalitasState.findMany.load(); // refresh list + return true; + } else { + throw new Error( + result.message || "Gagal mengupdate pencegahan kriminalitas" + ); + } + } catch (error) { + console.error("Gagal update:", error); + toast.error( + error instanceof Error + ? error.message + : "Gagal mengupdate pencegahan kriminalitas" + ); + return false; + } finally { + pencegahanKriminalitasState.update.loading = false; + } + }, + reset() { + pencegahanKriminalitasState.update.id = ""; + pencegahanKriminalitasState.update.form = { ...defaultForm }; + }, + }, +}); +export default pencegahanKriminalitasState; \ No newline at end of file diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/edit/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/edit/page.tsx new file mode 100644 index 00000000..d82f7a62 --- /dev/null +++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/edit/page.tsx @@ -0,0 +1,214 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +'use client' +import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; +import pencegahanKriminalitasState from '@/app/admin/(dashboard)/_state/keamanan/pencegahan-kriminalitas'; +import colors from '@/con/colors'; +import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; +import { IconArrowBack } from '@tabler/icons-react'; +import { useParams, useRouter } from 'next/navigation'; +import { useEffect, useState } from 'react'; +import { toast } from 'react-toastify'; +import { useProxy } from 'valtio/utils'; + + +function EditPencegahanKriminalitas() { + const router = useRouter(); + const params = useParams() + const kriminalitasState = useProxy(pencegahanKriminalitasState) + const [formData, setFormData] = useState({ + pencegahanKriminalitas: { + programKeamanan: { + nama: kriminalitasState.update.form.pencegahanKriminalitas.programKeamanan.nama, + deskripsi: kriminalitasState.update.form.pencegahanKriminalitas.programKeamanan.deskripsi, + slug: kriminalitasState.update.form.pencegahanKriminalitas.programKeamanan.slug, + }, + tipsKeamanan: { + judul: kriminalitasState.update.form.pencegahanKriminalitas.tipsKeamanan.judul, + konten: kriminalitasState.update.form.pencegahanKriminalitas.tipsKeamanan.konten, + slug: kriminalitasState.update.form.pencegahanKriminalitas.tipsKeamanan.slug, + }, + videoKeamanan: { + judul: kriminalitasState.update.form.pencegahanKriminalitas.videoKeamanan.judul, + deskripsi: kriminalitasState.update.form.pencegahanKriminalitas.videoKeamanan.deskripsi, + videoUrl: kriminalitasState.update.form.pencegahanKriminalitas.videoKeamanan.videoUrl, + slug: kriminalitasState.update.form.pencegahanKriminalitas.videoKeamanan.slug, + }, + }, + }) + + useEffect(() => { + const loadKriminalitas = async () => { + const id = params?.id as string; + if (!id) return; + + try { + const data = await kriminalitasState.update.load(id); + if (data && data.pencegahanKriminalitas) { + const { programKeamanan, tipsKeamanan, videoKeamanan } = data.pencegahanKriminalitas; + + setFormData({ + pencegahanKriminalitas: { + programKeamanan: { + nama: programKeamanan?.nama || "", + deskripsi: programKeamanan?.deskripsi || "", + slug: programKeamanan?.slug || "", + }, + tipsKeamanan: { + judul: tipsKeamanan?.judul || "", + konten: tipsKeamanan?.konten || "", + slug: tipsKeamanan?.slug || "", + }, + videoKeamanan: { + judul: videoKeamanan?.judul || "", + deskripsi: videoKeamanan?.deskripsi || "", + videoUrl: videoKeamanan?.videoUrl || "", + slug: videoKeamanan?.slug || "", + }, + }, + }); + } + + } catch (error) { + console.error("Error loading pencegahan kriminalitas:", error); + toast.error("Gagal memuat data pencegahan kriminalitas"); + } + } + + loadKriminalitas(); + }, [params.id]); + + const handleSubmit = async () => { + try { + kriminalitasState.update.form = { + ...kriminalitasState.update.form, + pencegahanKriminalitas: { + programKeamanan: { + nama: formData.pencegahanKriminalitas.programKeamanan.nama, + deskripsi: formData.pencegahanKriminalitas.programKeamanan.deskripsi, + slug: formData.pencegahanKriminalitas.programKeamanan.slug, + }, + tipsKeamanan: { + judul: formData.pencegahanKriminalitas.tipsKeamanan.judul, + konten: formData.pencegahanKriminalitas.tipsKeamanan.konten, + slug: formData.pencegahanKriminalitas.tipsKeamanan.slug, + }, + videoKeamanan: { + judul: formData.pencegahanKriminalitas.videoKeamanan.judul, + deskripsi: formData.pencegahanKriminalitas.videoKeamanan.deskripsi, + videoUrl: formData.pencegahanKriminalitas.videoKeamanan.videoUrl, + slug: formData.pencegahanKriminalitas.videoKeamanan.slug, + }, + }, + } + await kriminalitasState.update.update(); + toast.success("Pencegahan Kriminalitas berhasil diperbarui!"); + router.push("/admin/keamanan/pencegahan-kriminalitas"); + } catch (error) { + console.error("Error updating pencegahan kriminalitas:", error); + toast.error("Gagal memuat data pencegahan kriminalitas"); + } + } + return ( + + + + + + + + Edit Pencegahan Kriminalitas + { + formData.pencegahanKriminalitas.programKeamanan.nama = val.target.value; + }} + label={Judul Program Keamanan} + placeholder='Masukkan judul Program Keamanan' + /> + { + formData.pencegahanKriminalitas.programKeamanan.slug = val.target.value; + }} + label={Slug Program Keamanan} + placeholder='Masukkan slug Program Keamanan' + /> + + Deskripsi Program Keamanan + { + formData.pencegahanKriminalitas.programKeamanan.deskripsi = val; + }} + /> + + { + formData.pencegahanKriminalitas.tipsKeamanan.judul = val.target.value; + }} + label={Judul Tips Keamanan} + placeholder='Masukkan judul Tips Keamanan' + /> + { + formData.pencegahanKriminalitas.tipsKeamanan.slug = val.target.value; + }} + label={Slug Tips Keamanan} + placeholder='Masukkan slug Tips Keamanan' + /> + + Deskripsi Tips Keamanan + { + formData.pencegahanKriminalitas.tipsKeamanan.konten = val; + }} + /> + + { + formData.pencegahanKriminalitas.videoKeamanan.judul = val.target.value; + }} + label={Judul Video Keamanan} + placeholder='Masukkan judul Video Keamanan' + /> + { + formData.pencegahanKriminalitas.videoKeamanan.slug = val.target.value; + }} + label={Slug Video Keamanan} + placeholder='Masukkan slug Video Keamanan' + /> + + Deskripsi Tips Keamanan + { + formData.pencegahanKriminalitas.videoKeamanan.deskripsi = val; + }} + /> + + { + formData.pencegahanKriminalitas.videoKeamanan.videoUrl = val.target.value; + }} + label={Video URL} + placeholder='Masukkan video URL' + /> + + + + + + + ); +} + +export default EditPencegahanKriminalitas; diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/page.tsx new file mode 100644 index 00000000..145bf121 --- /dev/null +++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/[id]/page.tsx @@ -0,0 +1,121 @@ +'use client' +import colors from '@/con/colors'; +import { Box, Button, Flex, Paper, Skeleton, Stack, Text } from '@mantine/core'; +import { IconArrowBack, IconEdit, IconX } from '@tabler/icons-react'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; +import { useShallowEffect } from '@mantine/hooks'; +import { useParams } from 'next/navigation'; +import { useProxy } from 'valtio/utils'; +import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; +import pencegahanKriminalitasState from '../../../_state/keamanan/pencegahan-kriminalitas'; + +function DetailPencegahanKriminalitas() { + const [modalHapus, setModalHapus] = useState(false) + const [selectedId, setSelectedId] = useState(null) + const router = useRouter(); + const params = useParams() + const kriminalitasState = useProxy(pencegahanKriminalitasState) + + useShallowEffect(() => { + kriminalitasState.findUnique.load(params?.id as string) + }, []) + + const handleDelete = () => { + if (selectedId) { + kriminalitasState.delete.byId(selectedId) + setModalHapus(false) + setSelectedId(null) + router.push("/admin/keamanan/pencegahan-kriminalitas") + } + } + + if (!kriminalitasState.findUnique.data) { + return ( + + + + ) + } + return ( + + + + + + + + Detail Pencegahan Kriminalitas + {kriminalitasState.findUnique.data ? ( + + + + Judul Program Keamanan + {kriminalitasState.findUnique.data?.programKeamanan.nama} + + + Slug + {kriminalitasState.findUnique.data?.programKeamanan.slug} + + + Deskripsi + + + + Judul Tips Keamanan + {kriminalitasState.findUnique.data?.tipsKeamanan.judul} + + + Slug Tips Keamanan + {kriminalitasState.findUnique.data?.tipsKeamanan.slug} + + + Deskripsi Tips Keamanan + + + + + + + + + ) : null} + + + + + {/* Modal Hapus */} + setModalHapus(false)} + onConfirm={handleDelete} + text="Apakah anda yakin ingin menghapus pencegahan kriminalitas ini?" + /> + + ); +} + +export default DetailPencegahanKriminalitas; diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/page.tsx index 3d4445bc..72480025 100644 --- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/create/page.tsx @@ -1,43 +1,145 @@ 'use client' import colors from '@/con/colors'; import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; -import { IconArrowBack, IconImageInPicture } from '@tabler/icons-react'; +import { IconArrowBack } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; -import { KeamananEditor } from '../../_com/keamananEditor'; +import { useProxy } from 'valtio/utils'; +import CreateEditor from '../../../_com/createEditor'; +import pencegahanKriminalitasState from '../../../_state/keamanan/pencegahan-kriminalitas'; + function CreatePencegahanKriminalitas() { const router = useRouter(); + const kriminalitasState = useProxy(pencegahanKriminalitasState) + + const resetForm = () => { + kriminalitasState.create.form = { + pencegahanKriminalitas: { + programKeamanan: { + nama: "", + deskripsi: "", + slug: "", + }, + tipsKeamanan: { + judul: "", + konten: "", + slug: "", + }, + videoKeamanan: { + judul: "", + deskripsi: "", + videoUrl: "", + slug: "", + }, + }, + } + } + + const handleSubmit = async () => { + await kriminalitasState.create.create(); + resetForm(); + router.push('/admin/keamanan/pencegahan-kriminalitas'); + } return ( - + Create Pencegahan Kriminalitas - - Masukkan Image - - Nama Pencegahan Kriminalitas} - placeholder='Masukkan nama Pencegahan Kriminalitas' + value={kriminalitasState.create.form.pencegahanKriminalitas.programKeamanan.nama} + onChange={(val) => { + kriminalitasState.create.form.pencegahanKriminalitas.programKeamanan.nama = val.target.value; + }} + label={Judul Program Keamanan} + placeholder='Masukkan judul Program Keamanan' + /> + { + kriminalitasState.create.form.pencegahanKriminalitas.programKeamanan.slug = val.target.value; + }} + label={Slug Program Keamanan} + placeholder='Masukkan slug Program Keamanan' /> - Deskripsi Pencegahan Kriminalitas - Deskripsi Program Keamanan + { + kriminalitasState.create.form.pencegahanKriminalitas.programKeamanan.deskripsi = val; + }} /> + { + kriminalitasState.create.form.pencegahanKriminalitas.tipsKeamanan.judul = val.target.value; + }} + label={Judul Tips Keamanan} + placeholder='Masukkan judul Tips Keamanan' + /> + { + kriminalitasState.create.form.pencegahanKriminalitas.tipsKeamanan.slug = val.target.value; + }} + label={Slug Tips Keamanan} + placeholder='Masukkan slug Tips Keamanan' + /> + + Deskripsi Tips Keamanan + { + kriminalitasState.create.form.pencegahanKriminalitas.tipsKeamanan.konten = val; + }} + /> + + { + kriminalitasState.create.form.pencegahanKriminalitas.videoKeamanan.judul = val.target.value; + }} + label={Judul Video Keamanan} + placeholder='Masukkan judul Video Keamanan' + /> + { + kriminalitasState.create.form.pencegahanKriminalitas.videoKeamanan.slug = val.target.value; + }} + label={Slug Video Keamanan} + placeholder='Masukkan slug Video Keamanan' + /> + + Deskripsi Tips Keamanan + { + kriminalitasState.create.form.pencegahanKriminalitas.videoKeamanan.deskripsi = val; + }} + /> + + { + kriminalitasState.create.form.pencegahanKriminalitas.videoKeamanan.videoUrl = val.target.value; + }} + label={Video URL} + placeholder='Masukkan video URL' + /> - + - + - + ); } diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/detail/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/detail/page.tsx deleted file mode 100644 index 4a052948..00000000 --- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/detail/page.tsx +++ /dev/null @@ -1,70 +0,0 @@ -'use client' -import colors from '@/con/colors'; -import { Box, Button, Paper, Stack, Flex, Text, Image } from '@mantine/core'; -import { IconArrowBack, IconX, IconEdit } from '@tabler/icons-react'; -import { useRouter } from 'next/navigation'; -import React from 'react'; -// import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; - -function DetailPencegahanKriminalitas() { - const router = useRouter(); - return ( - - - - - - - Detail Pencegahan Kriminalitas - - - - - Nama Pencegahan Kriminalitas - Test Judul - - - Nomor Pencegahan Kriminalitas - Test Kategori - - - Deskripsi - Test Deskripsi - - - Gambar - gambar - - - Konten - Test Konten - - - - - - - - - - - - - {/* Modal Hapus - setModalHapus(false)} - onConfirm={handleHapus} - text="Apakah anda yakin ingin menghapus potensi ini?" - /> */} - - ); -} - -export default DetailPencegahanKriminalitas; diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/edit/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/edit/page.tsx deleted file mode 100644 index dd1afee7..00000000 --- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/edit/page.tsx +++ /dev/null @@ -1,44 +0,0 @@ -'use client' -import colors from '@/con/colors'; -import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; -import { IconArrowBack, IconImageInPicture } from '@tabler/icons-react'; -import { useRouter } from 'next/navigation'; -import { KeamananEditor } from '../../_com/keamananEditor'; - -function EditPencegahanKriminalitas() { - const router = useRouter(); - return ( - - - - - - - - Edit Pencegahan Kriminalitas - - Masukkan Image - - - Nama Pencegahan Kriminalitas} - placeholder='Masukkan nama Pencegahan Kriminalitas' - /> - - Deskripsi Pencegahan Kriminalitas - - - - - - - - - ); -} - -export default EditPencegahanKriminalitas; diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx index 99816ed1..1b901345 100644 --- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx @@ -1,10 +1,13 @@ 'use client' import colors from '@/con/colors'; -import { Box, Button, Paper, Table, TableTbody, TableTd, TableTh, TableThead, TableTr } from '@mantine/core'; +import { Box, Button, Paper, Skeleton, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text } from '@mantine/core'; import { IconDeviceImac, IconSearch } from '@tabler/icons-react'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import { useRouter } from 'next/navigation'; +import { useProxy } from 'valtio/utils'; +import pencegahanKriminalitasState from '../../_state/keamanan/pencegahan-kriminalitas'; +import { useShallowEffect } from '@mantine/hooks'; function PencegahanKriminalitas() { return ( @@ -20,34 +23,52 @@ function PencegahanKriminalitas() { } function ListPencegahanKriminalitas() { + const kriminalitasState = useProxy(pencegahanKriminalitasState) const router = useRouter(); + + useShallowEffect(() => { + kriminalitasState.findMany.load() + }, []) + + if (!kriminalitasState.findMany.data) { + return ( + + + + ) + } + return ( - - - + + Nama Pencegahan Kriminalitas - Nomor Pencegahan Kriminalitas + Slug Deskripsi Detail - - Pencegahan Kriminalitas 1 - 0896232831883 - Pencegahan Kriminalitas 1 - - + ))}
diff --git a/src/app/api/[[...slugs]]/_lib/keamanan/pencegahan-kriminalitas/del.ts b/src/app/api/[[...slugs]]/_lib/keamanan/pencegahan-kriminalitas/del.ts index 8da358cc..b4471be8 100644 --- a/src/app/api/[[...slugs]]/_lib/keamanan/pencegahan-kriminalitas/del.ts +++ b/src/app/api/[[...slugs]]/_lib/keamanan/pencegahan-kriminalitas/del.ts @@ -23,7 +23,8 @@ const pencegahanKriminalitasDelete = async (context: Context) => { if (!pencegahanKriminalitas) { return { status: 404, - body: "Pencegahan kriminalitas tidak ditemukan", + success: false, + message: "Pencegahan kriminalitas tidak ditemukan", }; } @@ -33,7 +34,8 @@ const pencegahanKriminalitasDelete = async (context: Context) => { return { status: 200, - body: "Pencegahan kriminalitas berhasil dihapus", + success: true, + message: "Pencegahan kriminalitas berhasil dihapus", }; }; export default pencegahanKriminalitasDelete;