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
-
-
-
- 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;