From 4a5bce9c2470a870911202d6e7f090c22a56b590 Mon Sep 17 00:00:00 2001 From: Sabda Yagra Date: Fri, 3 Oct 2025 16:36:48 +0700 Subject: [PATCH] fix: category in admin, broadcast in admin, and rewrite article --- .../account-list/component/column.tsx | 2 +- .../account-list/edit/[id]/page.tsx | 119 ++++++---- .../campaign-list/component/column.tsx | 115 +++++++++- .../campaign-list/component/table.tsx | 15 +- .../internal/edit/[id]/page.tsx | 1 - .../setting-tracking/component/table.tsx | 12 - .../regional/all-polda/audio/all/page.tsx | 186 +++++++++++++++ .../regional/all-polda/document/all/page.tsx | 186 +++++++++++++++ .../regional/all-polda/image/all/page.tsx | 186 +++++++++++++++ .../regional/all-polda/video/all/page.tsx | 186 +++++++++++++++ components/form/content/image-form.tsx | 3 +- components/landing-page/all-content-page.tsx | 211 ++++++++++++++++++ .../filter-all/audio-filter-card.tsx | 41 +++- .../filter-all/document-filter-card.tsx | 40 +++- .../filter-all/image-filter-card.tsx | 7 +- .../filter-all/video-filter-card.tsx | 58 +++-- service/broadcast/broadcast.ts | 2 +- 17 files changed, 1260 insertions(+), 110 deletions(-) create mode 100644 app/[locale]/(public)/regional/all-polda/audio/all/page.tsx create mode 100644 app/[locale]/(public)/regional/all-polda/document/all/page.tsx create mode 100644 app/[locale]/(public)/regional/all-polda/image/all/page.tsx create mode 100644 app/[locale]/(public)/regional/all-polda/video/all/page.tsx create mode 100644 components/landing-page/all-content-page.tsx diff --git a/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/component/column.tsx b/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/component/column.tsx index f8dcfd54..1461ddbb 100644 --- a/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/component/column.tsx +++ b/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/component/column.tsx @@ -106,7 +106,7 @@ const columns: ColumnDef[] = [ Edit diff --git a/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/edit/[id]/page.tsx b/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/edit/[id]/page.tsx index 269ce368..9a50c6a7 100644 --- a/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/edit/[id]/page.tsx +++ b/app/[locale]/(protected)/admin/broadcast/campaign-list/account-list/edit/[id]/page.tsx @@ -37,46 +37,74 @@ import { Checkbox } from "@/components/ui/checkbox"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { useParams } from "next/navigation"; import { useEffect } from "react"; +import { + getUserById, + saveUserInternal, +} from "@/service/management-user/management-user"; + +// const FormSchema = z.object({ +// fullname: z.string({ +// required_error: "Required", +// }), +// // accountType: z +// // .array(z.string()) +// // .refine((value) => value.some((item) => item), { +// // message: "Required", +// // }), +// // accountCategory: z.enum(["polri", "jurnalis", "umum", "ksp"], { +// // required_error: "Required", +// // }), +// email: z.string({ +// required_error: "Required", +// }), +// phoneNumber: z.string({ +// required_error: "Required", +// }), +// }); const FormSchema = z.object({ - name: z.string({ - required_error: "Required", - }), - accountType: z - .array(z.string()) - .refine((value) => value.some((item) => item), { - message: "Required", - }), - accountCategory: z.enum(["polri", "jurnalis", "umumu", "ksp"], { - required_error: "Required", - }), - email: z.string({ - required_error: "Required", - }), - whatsapp: z.string({ - required_error: "Required", - }), + fullname: z.string({ required_error: "Required" }), + email: z.string({ required_error: "Required" }), + phoneNumber: z.string({ required_error: "Required" }), + username: z.string().optional(), + role: z.string().optional(), + level: z.string().optional(), + nrp: z.string().optional(), + address: z.string().optional(), + password: z.string().optional(), + confirmPassword: z.string().optional(), }); export default function EditAccountForBroadcast() { const id = useParams()?.id; + const MySwal = withReactContent(Swal); const router = useRouter(); const form = useForm>({ resolver: zodResolver(FormSchema), - defaultValues: { accountType: [] }, + // defaultValues: { accountType: [] }, }); useEffect(() => { async function getDetailData() { - const response = await getMediaBlastAccount(String(id)); + const response = await getUserById(String(id)); const details = response?.data?.data; - console.log("new", details); - form.setValue("name", details.accountName); - form.setValue("email", details?.emailAddress); - form.setValue("whatsapp", details?.whatsappNumber); - form.setValue("accountCategory", details?.accountCategory); - form.setValue("accountType", details?.accountType.split(",")); + console.log("Response full:", response); + form.setValue("fullname", details?.fullname); + form.setValue("username", details?.username); + form.setValue("phoneNumber", details?.phoneNumber); + // form.setValue("nrp", details?.memberIdentity); + // form.setValue("address", details?.address); + form.setValue("email", details?.email); + form.setValue("role", details?.role?.code); + // form.setValue("level", String(details?.userLevelId)); + // form.setValue("name", details?.accountName); + // form.setValue("fullname", details?.fullname); + // form.setValue("email", details?.email); + // form.setValue("phoneNumber", details?.phoneNumber); + // form.setValue("whatsapp", details?.whatsappNumber); + // form.setValue("accountCategory", details?.accountCategory); + // form.setValue("accountType", details?.accountType.split(",")); } getDetailData(); @@ -106,7 +134,7 @@ export default function EditAccountForBroadcast() { confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { - router.push("/admin/broadcast/campaign-list/account-list"); + router.push("/admin/broadcast/campaign-list"); } }); } @@ -114,15 +142,24 @@ export default function EditAccountForBroadcast() { const save = async (data: z.infer) => { const reqData = { id: String(id), - accountName: data.name, - accountType: data.accountType.join(","), - accountCategory: data.accountCategory, - emailAddress: data.email, - whatsappNumber: data.whatsapp, + // accountName: data.fullname, + // accountType: data.accountType.join(","), + // accountCategory: data.accountCategory, + // emailAddress: data.email, + phoneNumber: data.phoneNumber, + firstName: data.fullname, + username: data.username, + roleId: data.role, + // userLevelId: Number(data.level), + // memberIdentity: data.nrp, + // address: data.address, + email: data.email, + isDefault: false, + isAdmin: true, }; console.log("data", data); - const response = await saveMediaBlastAccount(reqData); + const response = await saveUserInternal(reqData); if (response?.error) { error(response.message); return false; @@ -141,7 +178,7 @@ export default function EditAccountForBroadcast() {

Account

( Nama @@ -155,7 +192,7 @@ export default function EditAccountForBroadcast() { )} /> - ( @@ -227,8 +264,8 @@ export default function EditAccountForBroadcast() { )} - /> - */} + {/* ( @@ -269,13 +306,13 @@ export default function EditAccountForBroadcast() { )} - /> + /> */} ( - Nama + Email ( - Nama + Nomor Whatsapp diff --git a/app/[locale]/(protected)/admin/broadcast/campaign-list/component/column.tsx b/app/[locale]/(protected)/admin/broadcast/campaign-list/component/column.tsx index 51184795..2a8596f6 100644 --- a/app/[locale]/(protected)/admin/broadcast/campaign-list/component/column.tsx +++ b/app/[locale]/(protected)/admin/broadcast/campaign-list/component/column.tsx @@ -11,7 +11,6 @@ import { } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; - import { Link, useRouter } from "@/i18n/routing"; import { close, error, loading, success } from "@/config/swal"; import { deleteMediaBlastCampaign } from "@/service/broadcast/broadcast"; @@ -62,38 +61,47 @@ const columns: ColumnDef[] = [ { id: "actions", - accessorKey: "action", header: "Actions", - enableHiding: false, - cell: ({ row }) => { + cell: ({ row, onDeleteSuccess }: any) => { const MySwal = withReactContent(Swal); - const handleDelete = (id: any) => { + const handleDelete = (id: number) => { MySwal.fire({ title: "Apakah anda ingin menghapus data?", showCancelButton: true, confirmButtonColor: "#dc3545", confirmButtonText: "Iya", cancelButtonText: "Tidak", - }).then((result: any) => { + }).then((result) => { if (result.isConfirmed) { doDeleteAccount(id); } }); }; - async function doDeleteAccount(id: any) { + async function doDeleteAccount(id: number) { loading(); const response = await deleteMediaBlastCampaign(id); close(); + if (response.error) { error(response.message); return false; } - // success(); + console.log("Delete response:", response); + + MySwal.fire({ + icon: "success", + title: "Berhasil!", + text: "Data berhasil dihapus.", + confirmButtonColor: "#3085d6", + timer: 2000, + timerProgressBar: true, + }); + // ✅ panggil callback dari parent + onDeleteSuccess?.(id); } - return ( @@ -119,14 +127,99 @@ const columns: ColumnDef[] = [ Edit
- - Delete + handleDelete(row.original.id)} + className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none cursor-pointer" + > + Delete
); }, }, + + // { + // id: "actions", + // accessorKey: "action", + // header: "Actions", + // enableHiding: false, + // cell: ({ row, onDeleteSuccess }: any) => { + // const MySwal = withReactContent(Swal); + + // const handleDelete = (id: any) => { + // MySwal.fire({ + // title: "Apakah anda ingin menghapus data?", + // showCancelButton: true, + // confirmButtonColor: "#dc3545", + // confirmButtonText: "Iya", + // cancelButtonText: "Tidak", + // }).then((result: any) => { + // if (result.isConfirmed) { + // doDeleteAccount(id); + // } + // }); + // }; + + // async function doDeleteAccount(id: any) { + // loading(); + // const response = await deleteMediaBlastCampaign(id); + // close(); + + // if (response.error) { + // error(response.message); + // return false; + // } + // console.log("Delete response:", response); + + // MySwal.fire({ + // icon: "success", + // title: "Berhasil!", + // text: "Data berhasil dihapus.", + // confirmButtonColor: "#3085d6", + // timer: 2000, + // timerProgressBar: true, + // }); + // // ✅ langsung hapus dari state + // onDeleteSuccess?.(id); + // } + + // return ( + // + // + // + // + // + // + // + // Detail + // + // + // + // + // Edit + // + // + // handleDelete(row.original.id)} + // className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none cursor-pointer" + // > + // Delete + // + // + // + // ); + // }, + // }, ]; export default columns; diff --git a/app/[locale]/(protected)/admin/broadcast/campaign-list/component/table.tsx b/app/[locale]/(protected)/admin/broadcast/campaign-list/component/table.tsx index 5d8c6a1c..109ad6f5 100644 --- a/app/[locale]/(protected)/admin/broadcast/campaign-list/component/table.tsx +++ b/app/[locale]/(protected)/admin/broadcast/campaign-list/component/table.tsx @@ -89,6 +89,11 @@ const CampaignListTable = () => { const [page, setPage] = React.useState(1); const [totalPage, setTotalPage] = React.useState(1); + + function handleDeleteSuccess(id: number) { + setDataTable((prev) => prev.filter((item) => item.id !== id)); + } + const table = useReactTable({ data: dataTable, columns, @@ -189,7 +194,15 @@ const CampaignListTable = () => { > {row.getVisibleCells().map((cell) => ( - {flexRender(cell.column.columnDef.cell, cell.getContext())} + {/* {flexRender(cell.column.columnDef.cell, cell.getContext())} */} + {flexRender(cell.column.columnDef.cell, { + ...cell.getContext(), + onDeleteSuccess: (id: number) => { + setDataTable((prev) => + prev.filter((item) => item.id !== id) + ); + }, + })} ))} diff --git a/app/[locale]/(protected)/admin/management-user/internal/edit/[id]/page.tsx b/app/[locale]/(protected)/admin/management-user/internal/edit/[id]/page.tsx index d21b5135..3c69f907 100644 --- a/app/[locale]/(protected)/admin/management-user/internal/edit/[id]/page.tsx +++ b/app/[locale]/(protected)/admin/management-user/internal/edit/[id]/page.tsx @@ -221,7 +221,6 @@ export default function EditUserForm() { form.setValue("level", String(res?.userLevelId)); } else { initFetch(); - console.log("sadad", res?.role?.code); form.setValue("fullname", res?.fullname); form.setValue("username", res?.username); form.setValue("phoneNumber", res?.phoneNumber); diff --git a/app/[locale]/(protected)/admin/settings/setting-tracking/component/table.tsx b/app/[locale]/(protected)/admin/settings/setting-tracking/component/table.tsx index 4a3986ac..0e1af48a 100644 --- a/app/[locale]/(protected)/admin/settings/setting-tracking/component/table.tsx +++ b/app/[locale]/(protected)/admin/settings/setting-tracking/component/table.tsx @@ -27,22 +27,10 @@ import { import { useSearchParams } from "next/navigation"; import TablePagination from "@/components/table/table-pagination"; -import columns from "./column"; - -import { listEnableCategory } from "@/service/content/content"; import { Checkbox } from "@/components/ui/checkbox"; import { close, loading } from "@/config/swal"; import { Link, useRouter } from "@/i18n/routing"; -import { NewCampaignIcon } from "@/components/icon"; import { getCategories } from "@/service/settings/settings"; -import { - Dialog, - DialogContent, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; import { useTranslations } from "next-intl"; import { Popover, diff --git a/app/[locale]/(public)/regional/all-polda/audio/all/page.tsx b/app/[locale]/(public)/regional/all-polda/audio/all/page.tsx new file mode 100644 index 00000000..b9d33eee --- /dev/null +++ b/app/[locale]/(public)/regional/all-polda/audio/all/page.tsx @@ -0,0 +1,186 @@ +import AllContentPage from "@/components/landing-page/all-content-page"; + +const regions = [ + { name: "Polda Aceh", slug: "aceh", logo: "/logo/polda/polda-aceh.png" }, + { name: "Polda Bali", slug: "bali", logo: "/logo/polda/polda-bali.png" }, + { + name: "Polda Bangka Belitung", + slug: "bangka-belitung", + logo: "/logo/polda/polda-bangka-belitung.png", + }, + { + name: "Polda Banten", + slug: "banten", + logo: "/logo/polda/polda-banten.png", + }, + { + name: "Polda Bengkulu", + slug: "bengkulu", + logo: "/logo/polda/polda-bengkulu.png", + }, + { + name: "Polda DIY", + slug: "jogja", + logo: "/logo/polda/polda-jogja.png", + }, + { + name: "Polda Gorontalo", + slug: "gorontalo", + logo: "/logo/polda/polda-gorontalo.png", + }, + { name: "Polda Jambi", slug: "jambi", logo: "/logo/polda/polda-jambi.png" }, + { + name: "Polda Jawa Barat", + slug: "jawa-barat", + logo: "/logo/polda/polda-jawa-barat.png", + }, + { + name: "Polda Jawa Tengah", + slug: "jawa-tengah", + logo: "/logo/polda/polda-jawa-tengah.png", + }, + { + name: "Polda Jawa Timur", + slug: "jawa-timur", + logo: "/logo/polda/polda-jawa-timur.png", + }, + { + name: "Polda Kalimantan Barat", + slug: "kalimantan-barat", + logo: "/logo/polda/polda-kalimantan-barat.png", + }, + { + name: "Polda Kalimantan Selatan", + slug: "kalimantan-selatan", + logo: "/logo/polda/polda-kalimantan-selatan.png", + }, + { + name: "Polda Kalimantan Tengah", + slug: "kalimantan-tengah", + logo: "/logo/polda/polda-kalimantan-tengah.png", + }, + { + name: "Polda Kalimantan Timur", + slug: "kalimantan-timur", + logo: "/logo/polda/polda-kalimantan-timur.png", + }, + { + name: "Polda Kalimantan Utara", + slug: "kalimantan-utara", + logo: "/logo/polda/polda-kalimantan-utara.png", + }, + { + name: "Polda Kepulauan Riau", + slug: "kepulauan-riau", + logo: "/logo/polda/polda-kepulauan-riau.png", + }, + { + name: "Polda Lampung", + slug: "lampung", + logo: "/logo/polda/polda-lampung.png", + }, + { + name: "Polda Maluku", + slug: "maluku", + logo: "/logo/polda/polda-maluku.png", + }, + { + name: "Polda Maluku Utara", + slug: "maluku-utara", + logo: "/logo/polda/polda-maluku-utara.png", + }, + { + name: "Polda Metro Jaya", + slug: "metro-jaya", + logo: "/logo/polda/polda-metro-jaya.png", + }, + { + name: "Polda NTB", + slug: "ntb", + logo: "/logo/polda/polda-ntb.png", + }, + { + name: "Polda NTT", + slug: "ntt", + logo: "/logo/polda/polda-ntt.png", + }, + { name: "Polda Papua", slug: "papua", logo: "/logo/polda/polda-papua.png" }, + { + name: "Polda Papua Barat", + slug: "papua-barat", + logo: "/logo/polda/polda-papua-barat.png", + }, + { + name: "Polda Papua Barat Daya", + slug: "papua-barat-daya", + logo: "/logo/polda/polda-papua-barat-daya.png", + }, + { + name: "Polda Papua Tengah", + slug: "papua-tengah", + logo: "/logo/polda/polda-papua-tengah.png", + }, + { name: "Polda Riau", slug: "riau", logo: "/logo/polda/polda-riau.png" }, + { + name: "Polda Sulawesi Barat", + slug: "sulawesi-barat", + logo: "/logo/polda/polda-sulawesi-barat.png", + }, + { + name: "Polda Sulawesi Selatan", + slug: "sulawesi-selatan", + logo: "/logo/polda/polda-sulawesi-selatan.png", + }, + { + name: "Polda Sulawesi Tengah", + slug: "sulawesi-tengah", + logo: "/logo/polda/polda-sulawesi-tengah.png", + }, + { + name: "Polda Sulawesi Tenggara", + slug: "sulawesi-tenggara", + logo: "/logo/polda/polda-sulawesi-tenggara.png", + }, + { + name: "Polda Sulawesi Utara", + slug: "sulawesi-utara", + logo: "/logo/polda/polda-sulawesi-utara.png", + }, + { + name: "Polda Sumatera Barat", + slug: "sumatera-barat", + logo: "/logo/polda/polda-sumatera-barat.png", + }, + { + name: "Polda Sumatera Selatan", + slug: "sumatera-selatan", + logo: "/logo/polda/polda-sumatera-selatan.png", + }, + { + name: "Polda Sumatera Utara", + slug: "sumatera-utara", + logo: "/logo/polda/polda-sumatera-utara.png", + }, + // { + // name: "Satuan Kerja POLRI", + // slug: "satker-polri", + // logo: "/logo/satker/SATUAN-KERJA-POLRI.png", + // }, + // { + // name: "Internasional", + // slug: "internasional", + // logo: "/assets/polda/internasional.png", + // }, +]; + +export default function PoldaAllAudioPage() { + return ( + + ); +} diff --git a/app/[locale]/(public)/regional/all-polda/document/all/page.tsx b/app/[locale]/(public)/regional/all-polda/document/all/page.tsx new file mode 100644 index 00000000..a56e2e67 --- /dev/null +++ b/app/[locale]/(public)/regional/all-polda/document/all/page.tsx @@ -0,0 +1,186 @@ +import AllContentPage from "@/components/landing-page/all-content-page"; + +const regions = [ + { name: "Polda Aceh", slug: "aceh", logo: "/logo/polda/polda-aceh.png" }, + { name: "Polda Bali", slug: "bali", logo: "/logo/polda/polda-bali.png" }, + { + name: "Polda Bangka Belitung", + slug: "bangka-belitung", + logo: "/logo/polda/polda-bangka-belitung.png", + }, + { + name: "Polda Banten", + slug: "banten", + logo: "/logo/polda/polda-banten.png", + }, + { + name: "Polda Bengkulu", + slug: "bengkulu", + logo: "/logo/polda/polda-bengkulu.png", + }, + { + name: "Polda DIY", + slug: "jogja", + logo: "/logo/polda/polda-jogja.png", + }, + { + name: "Polda Gorontalo", + slug: "gorontalo", + logo: "/logo/polda/polda-gorontalo.png", + }, + { name: "Polda Jambi", slug: "jambi", logo: "/logo/polda/polda-jambi.png" }, + { + name: "Polda Jawa Barat", + slug: "jawa-barat", + logo: "/logo/polda/polda-jawa-barat.png", + }, + { + name: "Polda Jawa Tengah", + slug: "jawa-tengah", + logo: "/logo/polda/polda-jawa-tengah.png", + }, + { + name: "Polda Jawa Timur", + slug: "jawa-timur", + logo: "/logo/polda/polda-jawa-timur.png", + }, + { + name: "Polda Kalimantan Barat", + slug: "kalimantan-barat", + logo: "/logo/polda/polda-kalimantan-barat.png", + }, + { + name: "Polda Kalimantan Selatan", + slug: "kalimantan-selatan", + logo: "/logo/polda/polda-kalimantan-selatan.png", + }, + { + name: "Polda Kalimantan Tengah", + slug: "kalimantan-tengah", + logo: "/logo/polda/polda-kalimantan-tengah.png", + }, + { + name: "Polda Kalimantan Timur", + slug: "kalimantan-timur", + logo: "/logo/polda/polda-kalimantan-timur.png", + }, + { + name: "Polda Kalimantan Utara", + slug: "kalimantan-utara", + logo: "/logo/polda/polda-kalimantan-utara.png", + }, + { + name: "Polda Kepulauan Riau", + slug: "kepulauan-riau", + logo: "/logo/polda/polda-kepulauan-riau.png", + }, + { + name: "Polda Lampung", + slug: "lampung", + logo: "/logo/polda/polda-lampung.png", + }, + { + name: "Polda Maluku", + slug: "maluku", + logo: "/logo/polda/polda-maluku.png", + }, + { + name: "Polda Maluku Utara", + slug: "maluku-utara", + logo: "/logo/polda/polda-maluku-utara.png", + }, + { + name: "Polda Metro Jaya", + slug: "metro-jaya", + logo: "/logo/polda/polda-metro-jaya.png", + }, + { + name: "Polda NTB", + slug: "ntb", + logo: "/logo/polda/polda-ntb.png", + }, + { + name: "Polda NTT", + slug: "ntt", + logo: "/logo/polda/polda-ntt.png", + }, + { name: "Polda Papua", slug: "papua", logo: "/logo/polda/polda-papua.png" }, + { + name: "Polda Papua Barat", + slug: "papua-barat", + logo: "/logo/polda/polda-papua-barat.png", + }, + { + name: "Polda Papua Barat Daya", + slug: "papua-barat-daya", + logo: "/logo/polda/polda-papua-barat-daya.png", + }, + { + name: "Polda Papua Tengah", + slug: "papua-tengah", + logo: "/logo/polda/polda-papua-tengah.png", + }, + { name: "Polda Riau", slug: "riau", logo: "/logo/polda/polda-riau.png" }, + { + name: "Polda Sulawesi Barat", + slug: "sulawesi-barat", + logo: "/logo/polda/polda-sulawesi-barat.png", + }, + { + name: "Polda Sulawesi Selatan", + slug: "sulawesi-selatan", + logo: "/logo/polda/polda-sulawesi-selatan.png", + }, + { + name: "Polda Sulawesi Tengah", + slug: "sulawesi-tengah", + logo: "/logo/polda/polda-sulawesi-tengah.png", + }, + { + name: "Polda Sulawesi Tenggara", + slug: "sulawesi-tenggara", + logo: "/logo/polda/polda-sulawesi-tenggara.png", + }, + { + name: "Polda Sulawesi Utara", + slug: "sulawesi-utara", + logo: "/logo/polda/polda-sulawesi-utara.png", + }, + { + name: "Polda Sumatera Barat", + slug: "sumatera-barat", + logo: "/logo/polda/polda-sumatera-barat.png", + }, + { + name: "Polda Sumatera Selatan", + slug: "sumatera-selatan", + logo: "/logo/polda/polda-sumatera-selatan.png", + }, + { + name: "Polda Sumatera Utara", + slug: "sumatera-utara", + logo: "/logo/polda/polda-sumatera-utara.png", + }, + // { + // name: "Satuan Kerja POLRI", + // slug: "satker-polri", + // logo: "/logo/satker/SATUAN-KERJA-POLRI.png", + // }, + // { + // name: "Internasional", + // slug: "internasional", + // logo: "/assets/polda/internasional.png", + // }, +]; + +export default function PoldaAllDocumentPage() { + return ( + + ); +} diff --git a/app/[locale]/(public)/regional/all-polda/image/all/page.tsx b/app/[locale]/(public)/regional/all-polda/image/all/page.tsx new file mode 100644 index 00000000..f00cceca --- /dev/null +++ b/app/[locale]/(public)/regional/all-polda/image/all/page.tsx @@ -0,0 +1,186 @@ +import AllContentPage from "@/components/landing-page/all-content-page"; + +const regions = [ + { name: "Polda Aceh", slug: "aceh", logo: "/logo/polda/polda-aceh.png" }, + { name: "Polda Bali", slug: "bali", logo: "/logo/polda/polda-bali.png" }, + { + name: "Polda Bangka Belitung", + slug: "bangka-belitung", + logo: "/logo/polda/polda-bangka-belitung.png", + }, + { + name: "Polda Banten", + slug: "banten", + logo: "/logo/polda/polda-banten.png", + }, + { + name: "Polda Bengkulu", + slug: "bengkulu", + logo: "/logo/polda/polda-bengkulu.png", + }, + { + name: "Polda DIY", + slug: "jogja", + logo: "/logo/polda/polda-jogja.png", + }, + { + name: "Polda Gorontalo", + slug: "gorontalo", + logo: "/logo/polda/polda-gorontalo.png", + }, + { name: "Polda Jambi", slug: "jambi", logo: "/logo/polda/polda-jambi.png" }, + { + name: "Polda Jawa Barat", + slug: "jawa-barat", + logo: "/logo/polda/polda-jawa-barat.png", + }, + { + name: "Polda Jawa Tengah", + slug: "jawa-tengah", + logo: "/logo/polda/polda-jawa-tengah.png", + }, + { + name: "Polda Jawa Timur", + slug: "jawa-timur", + logo: "/logo/polda/polda-jawa-timur.png", + }, + { + name: "Polda Kalimantan Barat", + slug: "kalimantan-barat", + logo: "/logo/polda/polda-kalimantan-barat.png", + }, + { + name: "Polda Kalimantan Selatan", + slug: "kalimantan-selatan", + logo: "/logo/polda/polda-kalimantan-selatan.png", + }, + { + name: "Polda Kalimantan Tengah", + slug: "kalimantan-tengah", + logo: "/logo/polda/polda-kalimantan-tengah.png", + }, + { + name: "Polda Kalimantan Timur", + slug: "kalimantan-timur", + logo: "/logo/polda/polda-kalimantan-timur.png", + }, + { + name: "Polda Kalimantan Utara", + slug: "kalimantan-utara", + logo: "/logo/polda/polda-kalimantan-utara.png", + }, + { + name: "Polda Kepulauan Riau", + slug: "kepulauan-riau", + logo: "/logo/polda/polda-kepulauan-riau.png", + }, + { + name: "Polda Lampung", + slug: "lampung", + logo: "/logo/polda/polda-lampung.png", + }, + { + name: "Polda Maluku", + slug: "maluku", + logo: "/logo/polda/polda-maluku.png", + }, + { + name: "Polda Maluku Utara", + slug: "maluku-utara", + logo: "/logo/polda/polda-maluku-utara.png", + }, + { + name: "Polda Metro Jaya", + slug: "metro-jaya", + logo: "/logo/polda/polda-metro-jaya.png", + }, + { + name: "Polda NTB", + slug: "ntb", + logo: "/logo/polda/polda-ntb.png", + }, + { + name: "Polda NTT", + slug: "ntt", + logo: "/logo/polda/polda-ntt.png", + }, + { name: "Polda Papua", slug: "papua", logo: "/logo/polda/polda-papua.png" }, + { + name: "Polda Papua Barat", + slug: "papua-barat", + logo: "/logo/polda/polda-papua-barat.png", + }, + { + name: "Polda Papua Barat Daya", + slug: "papua-barat-daya", + logo: "/logo/polda/polda-papua-barat-daya.png", + }, + { + name: "Polda Papua Tengah", + slug: "papua-tengah", + logo: "/logo/polda/polda-papua-tengah.png", + }, + { name: "Polda Riau", slug: "riau", logo: "/logo/polda/polda-riau.png" }, + { + name: "Polda Sulawesi Barat", + slug: "sulawesi-barat", + logo: "/logo/polda/polda-sulawesi-barat.png", + }, + { + name: "Polda Sulawesi Selatan", + slug: "sulawesi-selatan", + logo: "/logo/polda/polda-sulawesi-selatan.png", + }, + { + name: "Polda Sulawesi Tengah", + slug: "sulawesi-tengah", + logo: "/logo/polda/polda-sulawesi-tengah.png", + }, + { + name: "Polda Sulawesi Tenggara", + slug: "sulawesi-tenggara", + logo: "/logo/polda/polda-sulawesi-tenggara.png", + }, + { + name: "Polda Sulawesi Utara", + slug: "sulawesi-utara", + logo: "/logo/polda/polda-sulawesi-utara.png", + }, + { + name: "Polda Sumatera Barat", + slug: "sumatera-barat", + logo: "/logo/polda/polda-sumatera-barat.png", + }, + { + name: "Polda Sumatera Selatan", + slug: "sumatera-selatan", + logo: "/logo/polda/polda-sumatera-selatan.png", + }, + { + name: "Polda Sumatera Utara", + slug: "sumatera-utara", + logo: "/logo/polda/polda-sumatera-utara.png", + }, + // { + // name: "Satuan Kerja POLRI", + // slug: "satker-polri", + // logo: "/logo/satker/SATUAN-KERJA-POLRI.png", + // }, + // { + // name: "Internasional", + // slug: "internasional", + // logo: "/assets/polda/internasional.png", + // }, +]; + +export default function PoldaAllImagePage() { + return ( + + ); +} diff --git a/app/[locale]/(public)/regional/all-polda/video/all/page.tsx b/app/[locale]/(public)/regional/all-polda/video/all/page.tsx new file mode 100644 index 00000000..c39b75c7 --- /dev/null +++ b/app/[locale]/(public)/regional/all-polda/video/all/page.tsx @@ -0,0 +1,186 @@ +import AllContentPage from "@/components/landing-page/all-content-page"; + +const regions = [ + { name: "Polda Aceh", slug: "aceh", logo: "/logo/polda/polda-aceh.png" }, + { name: "Polda Bali", slug: "bali", logo: "/logo/polda/polda-bali.png" }, + { + name: "Polda Bangka Belitung", + slug: "bangka-belitung", + logo: "/logo/polda/polda-bangka-belitung.png", + }, + { + name: "Polda Banten", + slug: "banten", + logo: "/logo/polda/polda-banten.png", + }, + { + name: "Polda Bengkulu", + slug: "bengkulu", + logo: "/logo/polda/polda-bengkulu.png", + }, + { + name: "Polda DIY", + slug: "jogja", + logo: "/logo/polda/polda-jogja.png", + }, + { + name: "Polda Gorontalo", + slug: "gorontalo", + logo: "/logo/polda/polda-gorontalo.png", + }, + { name: "Polda Jambi", slug: "jambi", logo: "/logo/polda/polda-jambi.png" }, + { + name: "Polda Jawa Barat", + slug: "jawa-barat", + logo: "/logo/polda/polda-jawa-barat.png", + }, + { + name: "Polda Jawa Tengah", + slug: "jawa-tengah", + logo: "/logo/polda/polda-jawa-tengah.png", + }, + { + name: "Polda Jawa Timur", + slug: "jawa-timur", + logo: "/logo/polda/polda-jawa-timur.png", + }, + { + name: "Polda Kalimantan Barat", + slug: "kalimantan-barat", + logo: "/logo/polda/polda-kalimantan-barat.png", + }, + { + name: "Polda Kalimantan Selatan", + slug: "kalimantan-selatan", + logo: "/logo/polda/polda-kalimantan-selatan.png", + }, + { + name: "Polda Kalimantan Tengah", + slug: "kalimantan-tengah", + logo: "/logo/polda/polda-kalimantan-tengah.png", + }, + { + name: "Polda Kalimantan Timur", + slug: "kalimantan-timur", + logo: "/logo/polda/polda-kalimantan-timur.png", + }, + { + name: "Polda Kalimantan Utara", + slug: "kalimantan-utara", + logo: "/logo/polda/polda-kalimantan-utara.png", + }, + { + name: "Polda Kepulauan Riau", + slug: "kepulauan-riau", + logo: "/logo/polda/polda-kepulauan-riau.png", + }, + { + name: "Polda Lampung", + slug: "lampung", + logo: "/logo/polda/polda-lampung.png", + }, + { + name: "Polda Maluku", + slug: "maluku", + logo: "/logo/polda/polda-maluku.png", + }, + { + name: "Polda Maluku Utara", + slug: "maluku-utara", + logo: "/logo/polda/polda-maluku-utara.png", + }, + { + name: "Polda Metro Jaya", + slug: "metro-jaya", + logo: "/logo/polda/polda-metro-jaya.png", + }, + { + name: "Polda NTB", + slug: "ntb", + logo: "/logo/polda/polda-ntb.png", + }, + { + name: "Polda NTT", + slug: "ntt", + logo: "/logo/polda/polda-ntt.png", + }, + { name: "Polda Papua", slug: "papua", logo: "/logo/polda/polda-papua.png" }, + { + name: "Polda Papua Barat", + slug: "papua-barat", + logo: "/logo/polda/polda-papua-barat.png", + }, + { + name: "Polda Papua Barat Daya", + slug: "papua-barat-daya", + logo: "/logo/polda/polda-papua-barat-daya.png", + }, + { + name: "Polda Papua Tengah", + slug: "papua-tengah", + logo: "/logo/polda/polda-papua-tengah.png", + }, + { name: "Polda Riau", slug: "riau", logo: "/logo/polda/polda-riau.png" }, + { + name: "Polda Sulawesi Barat", + slug: "sulawesi-barat", + logo: "/logo/polda/polda-sulawesi-barat.png", + }, + { + name: "Polda Sulawesi Selatan", + slug: "sulawesi-selatan", + logo: "/logo/polda/polda-sulawesi-selatan.png", + }, + { + name: "Polda Sulawesi Tengah", + slug: "sulawesi-tengah", + logo: "/logo/polda/polda-sulawesi-tengah.png", + }, + { + name: "Polda Sulawesi Tenggara", + slug: "sulawesi-tenggara", + logo: "/logo/polda/polda-sulawesi-tenggara.png", + }, + { + name: "Polda Sulawesi Utara", + slug: "sulawesi-utara", + logo: "/logo/polda/polda-sulawesi-utara.png", + }, + { + name: "Polda Sumatera Barat", + slug: "sumatera-barat", + logo: "/logo/polda/polda-sumatera-barat.png", + }, + { + name: "Polda Sumatera Selatan", + slug: "sumatera-selatan", + logo: "/logo/polda/polda-sumatera-selatan.png", + }, + { + name: "Polda Sumatera Utara", + slug: "sumatera-utara", + logo: "/logo/polda/polda-sumatera-utara.png", + }, + // { + // name: "Satuan Kerja POLRI", + // slug: "satker-polri", + // logo: "/logo/satker/SATUAN-KERJA-POLRI.png", + // }, + // { + // name: "Internasional", + // slug: "internasional", + // logo: "/assets/polda/internasional.png", + // }, +]; + +export default function PoldaAllVideoPage() { + return ( + + ); +} diff --git a/components/form/content/image-form.tsx b/components/form/content/image-form.tsx index fd3baf65..c6bb4715 100644 --- a/components/form/content/image-form.tsx +++ b/components/form/content/image-form.tsx @@ -451,6 +451,7 @@ export default function FormImage() { "" ); const articleImagesData = articleData?.imagesUrl?.split(","); + setArticleBody(cleanArticleBody || ""); setValue("description", cleanArticleBody || ""); setDetailData(articleData); setSelectedArticleId(id); @@ -1738,7 +1739,7 @@ export default function FormImage() { {/* */} - {levelNumber !== "2" && levelNumber !== "3" && ( + {levelNumber !== "2" && ( diff --git a/components/landing-page/all-content-page.tsx b/components/landing-page/all-content-page.tsx new file mode 100644 index 00000000..a823e705 --- /dev/null +++ b/components/landing-page/all-content-page.tsx @@ -0,0 +1,211 @@ +"use client"; + +import { useEffect, useState } from "react"; +import Image from "next/image"; +import Link from "next/link"; +import { listDataRegional } from "@/service/landing/landing"; +import { + Carousel, + CarouselContent, + CarouselItem, + CarouselNext, + CarouselPrevious, +} from "@/components/ui/carousel"; + +interface ContentItem { + id: number; + slug: string; + title: string; + thumbnailLink?: string; + categoryName?: string; +} + +interface RegionOrSatker { + name: string; + slug: string; + logo: string; +} + +interface AllContentPageProps { + typeId: string; // 1 = image, 2 = video, 3 = text, 4 = audio + title: string; + basePath: "image" | "video" | "document" | "audio"; + mode: "polda" | "satker"; + dataList: RegionOrSatker[]; +} + +export default function AllContentPage({ + typeId, + title, + basePath, + mode, + dataList, +}: AllContentPageProps) { + const [contents, setContents] = useState>({}); + + useEffect(() => { + async function fetchData() { + const promises = dataList.map(async (region) => { + try { + const res = await listDataRegional( + typeId, + "", + "", + "", + "", + "", + "", + "", + "", + 10, + 0, + "createdAt" + ); + return { slug: region.slug, data: res?.data?.data?.content || [] }; + } catch { + return { slug: region.slug, data: [] }; + } + }); + + const resultsArray = await Promise.all(promises); + const results: Record = {}; + resultsArray.forEach((r) => { + results[r.slug] = r.data; + }); + setContents(results); + } + + fetchData(); + }, [typeId, dataList]); + + function renderCard(item: ContentItem, regionSlug: string) { + const href = `/${mode}/${regionSlug}/${basePath}/detail/${item.slug}`; + + // 🖼 Image & 🎥 Video sama + if (basePath === "image" || basePath === "video") { + return ( + + {item.thumbnailLink && ( + {item.title} + )} +
{item.title}
+ + ); + } + + // 📄 Document + if (basePath === "document") { + return ( + +
+ + + +
+
+
+ {item.categoryName?.toUpperCase() ?? "Document"} +
+
+ {item.title} +
+
+ + ); + } + + // 🎧 Audio + if (basePath === "audio") { + return ( + +
+ + + +
+
+

+ {item.categoryName?.toUpperCase() ?? "Audio"} +

+

+ {item.title} +

+
+ + ); + } + } + + return ( +
+

{title}

+ + {dataList.map((region) => ( +
+ {/* Header */} +
+ {region.name} +

{region.name}

+
+ + {/* Carousel Konten */} + {contents[region.slug]?.length > 0 ? ( + + + {contents[region.slug].map((item) => ( + + {renderCard(item, region.slug)} + + ))} + + + + + ) : ( +

Tidak ada konten di {region.name}

+ )} +
+ ))} +
+ ); +} diff --git a/components/landing-page/filter-all/audio-filter-card.tsx b/components/landing-page/filter-all/audio-filter-card.tsx index c143f6d1..c9787bd7 100644 --- a/components/landing-page/filter-all/audio-filter-card.tsx +++ b/components/landing-page/filter-all/audio-filter-card.tsx @@ -196,6 +196,24 @@ export default function FilterAudioComponent(props: { } } + const basePath = asPath.includes("/polda/") + ? `/${asPath.split("/")[1]}/${asPath.split("/")[2]}` + : ""; + + const type = group || asPath.includes("/polda/") ? "regional?" : "filter?"; + + const sort = sortByOpt === "popular" ? "sortBy=popular" : "sortBy=latest"; + + const titleParam = title ? `&title=${title?.toLowerCase()}` : ""; + + const categoryParam = categorie ? `&category=${categorie}` : ""; + + const fullQuery = `${type}${sort}${titleParam}${categoryParam}${ + startDateString ? `&startDate=${startDateString}` : "" + }${endDateString ? `&endDate=${endDateString}` : ""}`; + + const href = `${basePath}/image/${fullQuery}`; + return newContent?.length > 0 ? (

{`Audio (${totalContent})`}

@@ -287,17 +305,18 @@ export default function FilterAudioComponent(props: {
Lihat Semua diff --git a/components/landing-page/filter-all/document-filter-card.tsx b/components/landing-page/filter-all/document-filter-card.tsx index 25e95c97..b4d3dd21 100644 --- a/components/landing-page/filter-all/document-filter-card.tsx +++ b/components/landing-page/filter-all/document-filter-card.tsx @@ -153,6 +153,24 @@ export default function FilterDocumentComponent(props: { setTotalContent(data?.totalElements); } + const basePath = asPath.includes("/polda/") + ? `/${asPath.split("/")[1]}/${asPath.split("/")[2]}` + : ""; + + const type = group || asPath.includes("/polda/") ? "regional?" : "filter?"; + + const sort = sortByOpt === "popular" ? "sortBy=popular" : "sortBy=latest"; + + const titleParam = title ? `&title=${title?.toLowerCase()}` : ""; + + const categoryParam = categorie ? `&category=${categorie}` : ""; + + const fullQuery = `${type}${sort}${titleParam}${categoryParam}${ + startDateString ? `&startDate=${startDateString}` : "" + }${endDateString ? `&endDate=${endDateString}` : ""}`; + + const href = `${basePath}/image/${fullQuery}`; + return newContent?.length > 0 ? (

{`Document (${totalContent})`}

@@ -214,7 +232,7 @@ export default function FilterDocumentComponent(props: { {newContent?.map((text: any) => (
Lihat Semua diff --git a/components/landing-page/filter-all/image-filter-card.tsx b/components/landing-page/filter-all/image-filter-card.tsx index 3e950a90..1472ea39 100644 --- a/components/landing-page/filter-all/image-filter-card.tsx +++ b/components/landing-page/filter-all/image-filter-card.tsx @@ -149,12 +149,17 @@ export default function FilterImageComponent(props: { : ""; const type = group || asPath.includes("/polda/") ? "regional?" : "filter?"; + const sort = sortByOpt === "popular" ? "sortBy=popular" : "sortBy=latest"; + const titleParam = title ? `&title=${title?.toLowerCase()}` : ""; + const categoryParam = categorie ? `&category=${categorie}` : ""; + const fullQuery = `${type}${sort}${titleParam}${categoryParam}${ startDateString ? `&startDate=${startDateString}` : "" }${endDateString ? `&endDate=${endDateString}` : ""}`; + const href = `${basePath}/image/${fullQuery}`; let prefixPath = poldaName @@ -284,7 +289,7 @@ export default function FilterImageComponent(props: {
Lihat Semua diff --git a/components/landing-page/filter-all/video-filter-card.tsx b/components/landing-page/filter-all/video-filter-card.tsx index 26acff0f..1169ad34 100644 --- a/components/landing-page/filter-all/video-filter-card.tsx +++ b/components/landing-page/filter-all/video-filter-card.tsx @@ -153,6 +153,24 @@ export default function FilterVideoComponent(props: { setTotalContent(response?.data?.data?.totalElements); } + const basePath = asPath.includes("/polda/") + ? `/${asPath.split("/")[1]}/${asPath.split("/")[2]}` + : ""; + + const type = group || asPath.includes("/polda/") ? "regional?" : "filter?"; + + const sort = sortByOpt === "popular" ? "sortBy=popular" : "sortBy=latest"; + + const titleParam = title ? `&title=${title?.toLowerCase()}` : ""; + + const categoryParam = categorie ? `&category=${categorie}` : ""; + + const fullQuery = `${type}${sort}${titleParam}${categoryParam}${ + startDateString ? `&startDate=${startDateString}` : "" + }${endDateString ? `&endDate=${endDateString}` : ""}`; + + const href = `${basePath}/image/${fullQuery}`; + return newContent?.length > 0 ? (

{`Audio Visual (${totalContent})`}

@@ -240,25 +258,27 @@ export default function FilterVideoComponent(props: {
Lihat Semua diff --git a/service/broadcast/broadcast.ts b/service/broadcast/broadcast.ts index 29bae757..a718491e 100644 --- a/service/broadcast/broadcast.ts +++ b/service/broadcast/broadcast.ts @@ -85,7 +85,7 @@ export async function getMediaBlastCampaignList() { export async function deleteMediaBlastCampaign(id: string | number): Promise { const url = `media/blast/campaign?id=${id}`; - return httpDeleteInterceptor({ url }); + return httpDeleteInterceptor( url ); } export async function detailMediaSummary(id: string) {