diff --git a/app/[locale]/(protected)/admin/settings/iklan/component/table.tsx b/app/[locale]/(protected)/admin/settings/iklan/component/table.tsx index e588bce4..87fc408b 100644 --- a/app/[locale]/(protected)/admin/settings/iklan/component/table.tsx +++ b/app/[locale]/(protected)/admin/settings/iklan/component/table.tsx @@ -53,7 +53,7 @@ import { InputGroup, InputGroupText } from "@/components/ui/input-group"; import { paginationBlog } from "@/service/blog/blog"; import { ticketingPagination } from "@/service/ticketing/ticketing"; import { Badge } from "@/components/ui/badge"; -import { useRouter, useSearchParams } from "next/navigation"; +import { useSearchParams } from "next/navigation"; import TablePagination from "@/components/table/table-pagination"; import columns from "./column"; import { getPlanningPagination } from "@/service/agenda-setting/agenda-setting"; @@ -69,7 +69,7 @@ import { import { listEnableCategory } from "@/service/content/content"; import { Checkbox } from "@/components/ui/checkbox"; import { close, loading } from "@/config/swal"; -import { Link } from "@/i18n/routing"; +import { Link, useRouter } from "@/i18n/routing"; import { TambahIklanModal } from "@/components/form/setting/form-add-iklan"; const AdvertisementsList = () => { @@ -150,11 +150,7 @@ const AdvertisementsList = () => { async function fetchData() { try { loading(); - const res = await listDataAdvertisements( - page - 1, - showData, - "", - ); + const res = await listDataAdvertisements(page - 1, showData, ""); const data = res?.data?.data; const contentData = data?.content; contentData.forEach((item: any, index: number) => { @@ -208,12 +204,21 @@ const AdvertisementsList = () => { <>
+ Jumlah Iklan Sudah Maksimal (4) +
+ )}- {image?.categoryName?.toUpperCase() ?? - "Giat Pimpinan"} -
++ {image?.categoryName?.toUpperCase() ?? + "Giat Pimpinan"} +
+
+ {formatDateToIndonesian(
+ new Date(image?.createdAt)
+ )}{" "}
+ {image?.timezone ?? "WIB"} |
+
{image?.title}
diff --git a/app/[locale]/(public)/video/filter/page.tsx b/app/[locale]/(public)/video/filter/page.tsx index 76be45c6..ae6e9385 100644 --- a/app/[locale]/(public)/video/filter/page.tsx +++ b/app/[locale]/(public)/video/filter/page.tsx @@ -871,12 +871,27 @@ const FilterPage = () => {- {video?.categoryName?.toUpperCase() ?? - "Giat Pimpinan"} -
++ {video?.categoryName?.toUpperCase() ?? + "Giat Pimpinan"} +
+
+ {formatDateToIndonesian(
+ new Date(video?.createdAt)
+ )}{" "}
+ {video?.timezone ?? "WIB"} |
+
{video?.title}
diff --git a/components/form/setting/form-add-iklan-update.tsx b/components/form/setting/form-add-iklan-update.tsx index 02dd6679..b6139a0a 100644 --- a/components/form/setting/form-add-iklan-update.tsx +++ b/components/form/setting/form-add-iklan-update.tsx @@ -41,6 +41,9 @@ import FileUploader from "../shared/file-uploader"; import { Icon } from "@/components/ui/icon"; import { useParams } from "next/navigation"; import Link from "next/link"; +import { listDataAdvertisements } from "@/service/broadcast/broadcast"; +import { close } from "@/config/swal"; +import { useRouter } from "@/i18n/routing"; const calendarSchema = z.object({ title: z.string().min(1, { message: "Judul diperlukan" }), @@ -64,6 +67,7 @@ interface Detail { export function TambahIklanUpdate() { const [open, setOpen] = React.useState(false); + const router = useRouter(); const MySwal = withReactContent(Swal); const t = useTranslations("Schedule"); const { id } = useParams() as { id: string }; @@ -124,8 +128,11 @@ export function TambahIklanUpdate() { setCheckedLevels(new Set(levelIds)); } + setValue("title", details.title); + setValue("description", details.description); + if (details?.placements) { - setSelectedPlacement(details.placements); // "left-bottom", etc. + setSelectedPlacement(details.placements); } } } @@ -209,6 +216,58 @@ export function TambahIklanUpdate() { })); }; + async function fetchExistingImageAsFile( + url: string, + filename = "existing-image.jpg" + ) { + const response = await fetch(url); + const blob = await response.blob(); + const contentType = blob.type || "image/jpeg"; + return new File([blob], filename, { type: contentType }); + } + + // const save = async (data: CalendarSchema) => { + // const unitMapping = { + // allUnit: "0", + // mabes: "1", + // polda: "2", + // satker: "4", + // internasional: "5", + // }; + // const assignmentToString = Object.keys(unitSelection) + // .filter((key) => unitSelection[key as keyof typeof unitSelection]) + // .map((key) => unitMapping[key as keyof typeof unitMapping]) + // .join(","); + + // const formMedia = new FormData(); + // if (detail?.id) { + // formMedia.append("id", detail.id.toString()); + // } + // formMedia.append("title", data.title); + // formMedia.append("placements", selectedPlacement); + // formMedia.append("description", data.description); + // formMedia.append("redirectLink", "https://new.netidhub.com"); + // formMedia.append("assignedToLevel", handlePoldaPolresChange()); + // if (imageFiles.length > 0) { + // formMedia.append("file", imageFiles[0]); + // } + + // console.log("Form Data Submitted:", formMedia); + + // loading(); + // const response = await postAdvertisements(formMedia); + // if (response?.error) { + // error(response?.message); + // return false; + // } + // close(); + + // Cookies.set("scheduleId", response?.data?.data.id, { + // expires: 1, + // }); + // }; + + // Ini fungsi save (dalam component TambahIklanUpdate) const save = async (data: CalendarSchema) => { const unitMapping = { allUnit: "0", @@ -224,28 +283,48 @@ export function TambahIklanUpdate() { const formMedia = new FormData(); if (detail?.id) { - formMedia.append("id", detail.id.toString()); // Kirim ID untuk update + formMedia.append("id", detail.id.toString()); } + formMedia.append("title", data.title); formMedia.append("placements", selectedPlacement); formMedia.append("description", data.description); formMedia.append("redirectLink", "https://mediahub.polri.go.id"); formMedia.append("assignedToLevel", handlePoldaPolresChange()); - formMedia.append("file", imageFiles[0]); - console.log("Form Data Submitted:", formMedia); + if (imageFiles.length > 0) { + formMedia.append("file", imageFiles[0]); + } else if (detail?.id) { + const existingFile = await fetchExistingImageAsFile( + `https://netidhub.com/api/advertisements/viewer/${detail.id}`, + "existing-image.jpg" + ); + formMedia.append("file", existingFile); + } loading(); const response = await postAdvertisements(formMedia); + if (response?.error) { error(response?.message); return false; } + close(); + MySwal.fire({ + icon: "success", + title: "Berhasil", + text: "Iklan berhasil ditambahkan.", + confirmButtonText: "OK", + }).then(() => { + window.location.href = "/in/admin/settings/iklan"; + }); Cookies.set("scheduleId", response?.data?.data.id, { expires: 1, }); + + Cookies.set("scheduleId", response?.data?.data.id, { expires: 1 }); }; React.useEffect(() => { @@ -299,6 +378,46 @@ export function TambahIklanUpdate() { }; const handleRemoveFile = (id: number) => {}; + + React.useEffect(() => { + fetchData(); + // setPagination({ + // pageIndex: 0, + // pageSize: Number(showData), + // }); + }, []); + + const [disabledCheckbox, setDisabledCheckbox] = React.useState