From 740d73d6896d6cd978c614451507419f7c07a0ec Mon Sep 17 00:00:00 2001 From: Sabda Yagra Date: Wed, 11 Feb 2026 17:12:50 +0700 Subject: [PATCH] fix: satker section all and maps --- components/form/content/audio-detail-form.tsx | 577 +++++++++-------- components/form/content/audio-form.tsx | 2 +- components/form/content/image-detail-form.tsx | 597 ++++++++++-------- components/form/content/image-form.tsx | 39 +- components/form/content/teks-detail-form.tsx | 577 +++++++++-------- components/form/content/teks-form.tsx | 2 +- components/form/content/video-detail-form.tsx | 580 +++++++++-------- components/form/content/video-form.tsx | 44 +- components/maps/client-config.tsx | 3 +- 9 files changed, 1321 insertions(+), 1100 deletions(-) diff --git a/components/form/content/audio-detail-form.tsx b/components/form/content/audio-detail-form.tsx index 2876876e..2f86f9c0 100644 --- a/components/form/content/audio-detail-form.tsx +++ b/components/form/content/audio-detail-form.tsx @@ -115,7 +115,7 @@ const ViewEditor = dynamic( () => { return import("@/components/editor/view-editor"); }, - { ssr: false } + { ssr: false }, ); interface Destination { @@ -198,6 +198,12 @@ export default function FormAudioDetail() { satker: boolean; }> >([]); + const [creatorLevelNumber, setCreatorLevelNumber] = useState( + null, + ); + const isContentFromSatker = creatorLevelNumber === 3; + const isContentFromMabesOrPolda = + creatorLevelNumber === 1 || creatorLevelNumber === 2; useEffect(() => { if (Number(userLevelId) === 216 && Number(roleId) === 3) { @@ -209,7 +215,7 @@ export default function FormAudioDetail() { const handleFileUnitChange = ( fileIndex: number, key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { setFileUnitSelections((prev) => { const newSelections = [...prev]; @@ -229,7 +235,7 @@ export default function FormAudioDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[fileIndex] || new Set() + newArray[fileIndex] || new Set(), ); if (value) { @@ -260,12 +266,12 @@ export default function FormAudioDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - currentFileCheckedLevels.has(Number(item.id)) + currentFileCheckedLevels.has(Number(item.id)), ); if (!hasSelectedPolda) { alert( - "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES.", ); return prev; // Batalkan perubahan } @@ -302,7 +308,7 @@ export default function FormAudioDetail() { useEffect(() => { if (detail?.assignedToTopLevel) { const outputSet = new Set( - detail.assignedToTopLevel.split(",").map(Number) + detail.assignedToTopLevel.split(",").map(Number), ); setUnitSelection({ semua: outputSet.has(0), @@ -327,7 +333,7 @@ export default function FormAudioDetail() { acc[polda.id] = false; return acc; }, - {} + {}, ); setExpandedPolda(initialExpandedState); console.log("polres", initialExpandedState); @@ -362,7 +368,7 @@ export default function FormAudioDetail() { const handleUnitChange = ( key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { if (key === "semua") { const newState = { @@ -472,7 +478,7 @@ export default function FormAudioDetail() { const handleCheckboxChange = (id: number) => { setSelectedPublishers((prev) => - prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id] + prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id], ); }; @@ -494,7 +500,7 @@ export default function FormAudioDetail() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -542,6 +548,9 @@ export default function FormAudioDetail() { const details = response?.data?.data; setFiles(details?.files); setDetail(details); + if (details?.uploadedBy?.userLevel?.levelNumber) { + setCreatorLevelNumber(details.uploadedBy.userLevel.levelNumber); + } setMain({ type: details?.fileType.name, url: details?.files[0]?.url, @@ -552,14 +561,14 @@ export default function FormAudioDetail() { if (details?.assignedToLevel) { const levels = new Set( - details.assignedToLevel.split(",").map(Number) + details.assignedToLevel.split(",").map(Number), ); setCheckedLevels(levels); } if (details?.publishedForObject) { const publisherIds = details?.publishedForObject.map( - (obj: any) => obj.id + (obj: any) => obj.id, ); setSelectedPublishers(publisherIds); } @@ -709,7 +718,7 @@ export default function FormAudioDetail() { const setupPlacement = ( index: number, placement: string, - checked: boolean + checked: boolean, ) => { let temp = [...filePlacements]; if (checked) { @@ -720,7 +729,7 @@ export default function FormAudioDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Checklist semua item di modal @@ -770,7 +779,7 @@ export default function FormAudioDetail() { // Hanya auto-checklist "all" jika polda, polres, dan mabes ter-checklist // JANGAN include satker dalam perhitungan auto "all" const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length === 3 && !now.includes("all")) { now.push("all"); @@ -785,7 +794,7 @@ export default function FormAudioDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Unchecklist semua item di modal @@ -819,7 +828,7 @@ export default function FormAudioDetail() { // Hapus "all" jika tidak semua item ter-checklist if (now.includes("all")) { const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length < 3) { const newData = now.filter((b) => b !== "all"); @@ -838,7 +847,7 @@ export default function FormAudioDetail() { type: string, url: string, names: string, - format: string + format: string, ) => { console.log("Test 3 :", type, url, names, format); setMain({ @@ -873,7 +882,7 @@ export default function FormAudioDetail() { const updateModalChecklistLevels = ( fileIndex: number, placement: string, - checked: boolean + checked: boolean, ) => { if (!listDest || listDest.length === 0) return; @@ -906,7 +915,7 @@ export default function FormAudioDetail() { } else if (placement === "satker") { // Checklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.add(Number(satkerItem.id)); @@ -942,7 +951,7 @@ export default function FormAudioDetail() { } else if (placement === "satker") { // Unchecklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.delete(Number(satkerItem.id)); @@ -975,7 +984,7 @@ export default function FormAudioDetail() { // Fungsi untuk mengupdate checklist levels untuk file tertentu const handleFileCheckboxChangePlacement = ( fileIndex: number, - levelId: number + levelId: number, ) => { setFileCheckedLevels((prev) => { const newArray = [...prev]; @@ -987,7 +996,7 @@ export default function FormAudioDetail() { // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya const poldaItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if ( poldaItem && @@ -1010,7 +1019,7 @@ export default function FormAudioDetail() { // Jika ini adalah SATKER POLRI yang di-checklist, checklist juga semua sub-item di bawahnya const satkerItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if (satkerItem && satkerItem.name === "SATKER POLRI") { // Checklist semua sub-item di bawah SATKER POLRI (bukan POLRES) @@ -1041,7 +1050,7 @@ export default function FormAudioDetail() { // Hitung total POLDA yang ada (bukan SATKER POLRI) const totalPoldaCount = listDest.filter( - (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" + (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI", ).length; // Hitung berapa banyak POLDA yang ter-checklist (bukan SATKER POLRI) @@ -1068,7 +1077,7 @@ export default function FormAudioDetail() { } return total; }, - 0 + 0, ); // Hitung berapa banyak POLRES yang ter-checklist @@ -1078,7 +1087,7 @@ export default function FormAudioDetail() { return ( total + item.subDestination.filter((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ).length ); } @@ -1087,7 +1096,7 @@ export default function FormAudioDetail() { // Cek apakah SATKER POLRI ter-checklist const satkerItem = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); const isSatkerChecked = satkerItem && currentFileLevels.has(Number(satkerItem.id)); @@ -1121,7 +1130,7 @@ export default function FormAudioDetail() { // Cek apakah semua sub-items sudah ter-checklist const allSubItemsChecked = polda.subDestination?.every((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ); if (allSubItemsChecked) { @@ -1204,7 +1213,7 @@ export default function FormAudioDetail() { {detail && !categories.find( (cat) => - String(cat.id) === String(detail.category.id) + String(cat.id) === String(detail.category.id), ) && (
- {[ + {/* {[ { key: "semua", label: "Semua" }, { key: "nasional", label: "Nasional" }, { key: "wilayah", label: "Wilayah" }, @@ -1472,6 +1481,39 @@ export default function FormAudioDetail() { key: "international", label: "Internasional", }, + ] */} + {[ + { key: "semua", label: "Semua" }, + + ...(isContentFromMabesOrPolda + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + { + key: "wilayah", + label: "Wilayah", + }, + ] + : []), + + ...(isContentFromSatker + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + ] + : []), ].map((item, idx) => (
@@ -1509,251 +1551,262 @@ export default function FormAudioDetail() {
{/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {/* {fileUnitSelections[index]?.wilayah && ( */} + {!isContentFromSatker && + fileUnitSelections[index]?.wilayah && ( +
+

+ Detail Wilayah: +

- {/* Checkbox Sub-kategori dengan tombol Kustom sejajar */} -
- {[ - { key: "polda", label: "POLDA" }, - { key: "polres", label: "POLRES" }, - { key: "satker", label: "SATKER" }, - ].map((item, idx) => ( -
- { - handleFileUnitChange( - index, - item.key as keyof typeof unitSelection, - value as boolean - ); - setupPlacement( - index, - item.key, - Boolean(value) - ); - }} - /> -
-
- )} + )}
) : ( @@ -1832,7 +1885,7 @@ export default function FormAudioDetail() { > {template} - ) + ), )} diff --git a/components/form/content/audio-form.tsx b/components/form/content/audio-form.tsx index 1f7efb1c..8693a6d4 100644 --- a/components/form/content/audio-form.tsx +++ b/components/form/content/audio-form.tsx @@ -1806,7 +1806,7 @@ export default function FormAudio() {
- {levelNumber !== "2" && levelNumber !== "3" && ( + {levelNumber !== "2" && ( diff --git a/components/form/content/image-detail-form.tsx b/components/form/content/image-detail-form.tsx index 6270cec8..781861fb 100644 --- a/components/form/content/image-detail-form.tsx +++ b/components/form/content/image-detail-form.tsx @@ -115,7 +115,7 @@ const ViewEditor = dynamic( () => { return import("@/components/editor/view-editor"); }, - { ssr: false } + { ssr: false }, ); interface Destination { @@ -172,6 +172,12 @@ export default function FormImageDetail() { satker: boolean; }> >([]); + const [creatorLevelNumber, setCreatorLevelNumber] = useState( + null, + ); + const isContentFromSatker = creatorLevelNumber === 3; + const isContentFromMabesOrPolda = + creatorLevelNumber === 1 || creatorLevelNumber === 2; useEffect(() => { if (Number(userLevelId) === 216 && Number(roleId) === 3) { @@ -200,7 +206,7 @@ export default function FormImageDetail() { const [files, setFiles] = useState([]); const [rejectedFiles, setRejectedFiles] = useState([]); const [expandedPolda, setExpandedPolda] = useState>( - {} + {}, ); // State untuk melacak apakah perubahan berasal dari checkbox utama @@ -231,7 +237,7 @@ export default function FormImageDetail() { useEffect(() => { if (detail?.assignedToTopLevel) { const outputSet = new Set( - detail.assignedToTopLevel.split(",").map(Number) + detail.assignedToTopLevel.split(",").map(Number), ); setUnitSelection({ semua: outputSet.has(0), @@ -260,7 +266,7 @@ export default function FormImageDetail() { acc[polda.id] = false; return acc; }, - {} + {}, ); setExpandedPolda(initialExpandedState); console.log("polres", initialExpandedState); @@ -299,7 +305,7 @@ export default function FormImageDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - checkedLevels.has(Number(item.id)) + checkedLevels.has(Number(item.id)), ).length; const checkedPolresCount = listDest.reduce((total: number, item: any) => { @@ -308,7 +314,7 @@ export default function FormImageDetail() { return ( total + item.subDestination.filter((sub: any) => - checkedLevels.has(Number(sub.id)) + checkedLevels.has(Number(sub.id)), ).length ); } @@ -316,12 +322,12 @@ export default function FormImageDetail() { }, 0); const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); const checkedSatkerCount = satkerItem ? (checkedLevels.has(Number(satkerItem.id)) ? 1 : 0) + (satkerItem.subDestination?.filter((sub: any) => - checkedLevels.has(Number(sub.id)) + checkedLevels.has(Number(sub.id)), ).length || 0) : 0; @@ -391,7 +397,7 @@ export default function FormImageDetail() { } else if (mainCheckboxChangeType === "satker_checked") { // Checklist satker const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { newCheckedLevels.add(Number(satkerItem.id)); @@ -439,7 +445,7 @@ export default function FormImageDetail() { } else if (mainCheckboxChangeType === "satker_unchecked") { // Clear satker dan semua sub-item di bawahnya dari checkedLevels const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { newCheckedLevels.delete(Number(satkerItem.id)); @@ -466,7 +472,7 @@ export default function FormImageDetail() { const handleFileUnitChange = ( fileIndex: number, key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { setFileUnitSelections((prev) => { const newSelections = [...prev]; @@ -486,7 +492,7 @@ export default function FormImageDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[fileIndex] || new Set() + newArray[fileIndex] || new Set(), ); if (value) { @@ -517,12 +523,12 @@ export default function FormImageDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - currentFileCheckedLevels.has(Number(item.id)) + currentFileCheckedLevels.has(Number(item.id)), ); if (!hasSelectedPolda) { alert( - "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES.", ); return prev; // Batalkan perubahan } @@ -552,7 +558,7 @@ export default function FormImageDetail() { // Fungsi lama untuk kompatibilitas (akan dihapus nanti) const handleUnitChange = ( key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { // Set flag bahwa perubahan berasal dari checkbox utama setIsUpdatingFromMainCheckbox(true); @@ -578,13 +584,13 @@ export default function FormImageDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - checkedLevels.has(Number(item.id)) + checkedLevels.has(Number(item.id)), ); if (!hasSelectedPolda) { // Jika tidak ada POLDA yang dipilih, tampilkan peringatan dan batalkan alert( - "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES.", ); // Reset flag karena perubahan dibatalkan setIsUpdatingFromMainCheckbox(false); @@ -640,14 +646,14 @@ export default function FormImageDetail() { const handleCheckboxChange = (id: number) => { setSelectedPublishers((prev) => - prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id] + prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id], ); }; // Fungsi untuk mengupdate checklist levels untuk file tertentu const handleFileCheckboxChangePlacement = ( fileIndex: number, - levelId: number + levelId: number, ) => { setFileCheckedLevels((prev) => { const newArray = [...prev]; @@ -659,7 +665,7 @@ export default function FormImageDetail() { // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya const poldaItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if ( poldaItem && @@ -682,7 +688,7 @@ export default function FormImageDetail() { // Jika ini adalah SATKER POLRI yang di-checklist, checklist juga semua sub-item di bawahnya const satkerItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if (satkerItem && satkerItem.name === "SATKER POLRI") { // Checklist semua sub-item di bawah SATKER POLRI (bukan POLRES) @@ -710,7 +716,7 @@ export default function FormImageDetail() { // Cek apakah semua sub-items sudah ter-checklist const allSubItemsChecked = polda.subDestination?.every((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ); if (allSubItemsChecked) { @@ -750,7 +756,7 @@ export default function FormImageDetail() { // Hitung total POLDA yang ada (bukan SATKER POLRI) const totalPoldaCount = listDest.filter( - (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" + (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI", ).length; // Hitung berapa banyak POLDA yang ter-checklist (bukan SATKER POLRI) @@ -777,7 +783,7 @@ export default function FormImageDetail() { } return total; }, - 0 + 0, ); // Hitung berapa banyak POLRES yang ter-checklist @@ -787,7 +793,7 @@ export default function FormImageDetail() { return ( total + item.subDestination.filter((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ).length ); } @@ -796,7 +802,7 @@ export default function FormImageDetail() { // Cek apakah SATKER POLRI ter-checklist const satkerItem = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); const isSatkerChecked = satkerItem && currentFileLevels.has(Number(satkerItem.id)); @@ -833,7 +839,7 @@ export default function FormImageDetail() { // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya const poldaItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if ( poldaItem && @@ -856,7 +862,7 @@ export default function FormImageDetail() { // Jika ini adalah SATKER POLRI yang di-checklist, checklist juga semua sub-item di bawahnya const satkerItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if (satkerItem && satkerItem.name === "SATKER POLRI") { // Checklist semua sub-item di bawah SATKER POLRI (bukan POLRES) @@ -887,7 +893,7 @@ export default function FormImageDetail() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -936,6 +942,11 @@ export default function FormImageDetail() { console.log("detail", details); setFiles(details?.files); setDetail(details); + + if (details?.uploadedBy?.userLevel?.levelNumber) { + setCreatorLevelNumber(details.uploadedBy.userLevel.levelNumber); + } + setMain({ type: details?.fileType.name, url: details?.files[0]?.url, @@ -946,14 +957,14 @@ export default function FormImageDetail() { if (details?.assignedToLevel) { const levels = new Set( - details.assignedToLevel.split(",").map(Number) + details.assignedToLevel.split(",").map(Number), ); setCheckedLevels(levels); } if (details?.publishedForObject) { const publisherIds = details?.publishedForObject?.map( - (obj: any) => obj.id + (obj: any) => obj.id, ); setSelectedPublishers(publisherIds); } @@ -963,7 +974,7 @@ export default function FormImageDetail() { const filesData = details.files || []; const fileUrls = filesData.map((file: { thumbnailFileUrl: string }) => - file.thumbnailFileUrl ? file.thumbnailFileUrl : "default-image.jpg" + file.thumbnailFileUrl ? file.thumbnailFileUrl : "default-image.jpg", ); setDetailThumb(fileUrls); @@ -1083,7 +1094,7 @@ export default function FormImageDetail() { const setupPlacement = ( index: number, placement: string, - checked: boolean + checked: boolean, ) => { let temp = [...filePlacements]; if (checked) { @@ -1094,7 +1105,7 @@ export default function FormImageDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Checklist semua item di modal @@ -1144,7 +1155,7 @@ export default function FormImageDetail() { // Hanya auto-checklist "all" jika polda, polres, dan mabes ter-checklist // JANGAN include satker dalam perhitungan auto "all" const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length === 3 && !now.includes("all")) { now.push("all"); @@ -1159,7 +1170,7 @@ export default function FormImageDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Unchecklist semua item di modal @@ -1193,7 +1204,7 @@ export default function FormImageDetail() { // Hapus "all" jika tidak semua item ter-checklist if (now.includes("all")) { const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length < 3) { const newData = now.filter((b) => b !== "all"); @@ -1212,7 +1223,7 @@ export default function FormImageDetail() { const updateModalChecklistLevels = ( fileIndex: number, placement: string, - checked: boolean + checked: boolean, ) => { if (!listDest || listDest.length === 0) return; @@ -1245,7 +1256,7 @@ export default function FormImageDetail() { } else if (placement === "satker") { // Checklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.add(Number(satkerItem.id)); @@ -1281,7 +1292,7 @@ export default function FormImageDetail() { } else if (placement === "satker") { // Unchecklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.delete(Number(satkerItem.id)); @@ -1311,7 +1322,7 @@ export default function FormImageDetail() { type: string, url: string, names: string, - format: string + format: string, ) => { console.log("Test 3 :", type, url, names, format); setMain({ @@ -1411,7 +1422,7 @@ export default function FormImageDetail() { {detail && !categories.find( (cat) => - String(cat.id) === String(detail.category.id) + String(cat.id) === String(detail.category.id), ) && (
- {[ + {/* {[ { key: "semua", label: "Semua" }, { key: "nasional", label: "Nasional" }, { key: "wilayah", label: "Wilayah" }, @@ -1740,6 +1751,39 @@ export default function FormImageDetail() { key: "international", label: "Internasional", }, + ] */} + {[ + { key: "semua", label: "Semua" }, + + ...(isContentFromMabesOrPolda + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + { + key: "wilayah", + label: "Wilayah", + }, + ] + : []), + + ...(isContentFromSatker + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + ] + : []), ].map((item, idx) => (
@@ -1777,246 +1821,257 @@ export default function FormImageDetail() {
{/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {/* {fileUnitSelections[index]?.wilayah && ( */} + {!isContentFromSatker && + fileUnitSelections[index]?.wilayah && ( +
+

+ Detail Wilayah: +

- {/* Checkbox Sub-kategori dengan tombol Kustom sejajar */} -
- {[ - { key: "polda", label: "POLDA" }, - { key: "polres", label: "POLRES" }, - { key: "satker", label: "SATKER" }, - ].map((item, idx) => ( -
- { - handleFileUnitChange( - index, - item.key as keyof typeof unitSelection, - value as boolean - ); - setupPlacement( - index, - item.key, - Boolean(value) - ); - }} - /> -
+
+ + + + + + +
+ + +
-
- )} + )}
) : ( @@ -2095,7 +2150,7 @@ export default function FormImageDetail() { > {template} - ) + ), )} diff --git a/components/form/content/image-form.tsx b/components/form/content/image-form.tsx index df4c45e2..de319e31 100644 --- a/components/form/content/image-form.tsx +++ b/components/form/content/image-form.tsx @@ -82,7 +82,7 @@ const CustomEditor = dynamic( () => { return import("@/components/editor/custom-editor"); }, - { ssr: false } + { ssr: false }, ); export default function FormImage() { @@ -117,7 +117,7 @@ export default function FormImage() { const [isGeneratedArticle, setIsGeneratedArticle] = useState(false); const [articleBody, setArticleBody] = useState(""); const [selectedArticleId, setSelectedArticleId] = useState( - null + null, ); const [selectedMainKeyword, setSelectedMainKeyword] = useState(""); const [selectedWritingStyle, setSelectedWritingStyle] = @@ -183,17 +183,17 @@ export default function FormImage() { .filter( (file) => ["image/jpeg", "image/png", "image/jpg"].includes(file.type) && - file.size <= MAX_FILE_SIZE + file.size <= MAX_FILE_SIZE, ) .map((file) => Object.assign(file, { preview: URL.createObjectURL(file), - }) + }), ); if (validFiles.length === 0) { toast.error( - "File tidak valid. Hanya .jpg, .jpeg, .png maksimal 100MB yang diperbolehkan." + "File tidak valid. Hanya .jpg, .jpeg, .png maksimal 100MB yang diperbolehkan.", ); return; } @@ -227,12 +227,12 @@ export default function FormImage() { files.every( (file: File) => ["image/jpeg", "image/png", "image/jpg"].includes(file.type) && - file.size <= 100 * 1024 * 1024 + file.size <= 100 * 1024 * 1024, ), { message: "Hanya file .jpg, .jpeg, .png, maksimal 100MB yang diperbolehkan.", - } + }, ), categoryId: z.string().min(1, { message: "Kategori wajib dipilih." }), tags: z @@ -454,7 +454,7 @@ export default function FormImage() { const articleData = await waitForStatusUpdate(); const cleanArticleBody = articleData?.articleBody?.replace( /]*>/g, - "" + "", ); const articleImagesData = articleData?.imagesUrl?.split(","); setArticleBody(cleanArticleBody || ""); @@ -507,7 +507,7 @@ export default function FormImage() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -530,7 +530,7 @@ export default function FormImage() { setPublishedFor( options .filter((opt: any) => opt.id !== "all") - .map((opt: any) => opt.id) + .map((opt: any) => opt.id), ); } } else { @@ -594,11 +594,16 @@ export default function FormImage() { } else if (data.rewriteDescription && selectedFileType === "rewrite") { finalDescription = data.rewriteDescription; console.log("📤 Upload versi rewrite"); - } else { - // fallback: gunakan versi Indonesia original - finalDescription = data.descriptionOri ?? ""; - console.log("📤 Upload versi Indonesia (original)"); + } else if (data.description?.trim()) { + finalDescription = data.description; + } else if (data.descriptionOri?.trim()) { + finalDescription = data.descriptionOri; } + // else { + // // fallback: gunakan versi Indonesia original + // finalDescription = data.descriptionOri ?? ""; + // console.log("📤 Upload versi Indonesia (original)"); + // } if (!finalDescription?.trim()) { MySwal.fire("Error", "Deskripsi tidak boleh kosong.", "error"); @@ -690,7 +695,7 @@ export default function FormImage() { index, String(id), item, - fileTypeId == "2" || fileTypeId == "4" ? item.duration : "0" + fileTypeId == "2" || fileTypeId == "4" ? item.duration : "0", ); }); @@ -717,7 +722,7 @@ export default function FormImage() { idx: number, id: string, file: any, - duration: string + duration: string, ) { console.log(idx, id, file, duration); @@ -753,7 +758,7 @@ export default function FormImage() { onChunkComplete: ( chunkSize: any, bytesAccepted: any, - bytesTotal: any + bytesTotal: any, ) => { const uploadPersen = Math.floor((bytesAccepted / bytesTotal) * 100); progressInfo[idx].percentage = uploadPersen; diff --git a/components/form/content/teks-detail-form.tsx b/components/form/content/teks-detail-form.tsx index 8094a481..9dab8ebb 100644 --- a/components/form/content/teks-detail-form.tsx +++ b/components/form/content/teks-detail-form.tsx @@ -114,7 +114,7 @@ const ViewEditor = dynamic( () => { return import("@/components/editor/view-editor"); }, - { ssr: false } + { ssr: false }, ); interface Destination { @@ -191,6 +191,12 @@ export default function FormTeksDetail() { satker: boolean; }> >([]); + const [creatorLevelNumber, setCreatorLevelNumber] = useState( + null, + ); + const isContentFromSatker = creatorLevelNumber === 3; + const isContentFromMabesOrPolda = + creatorLevelNumber === 1 || creatorLevelNumber === 2; useEffect(() => { if (Number(userLevelId) === 216 && Number(roleId) === 3) { @@ -202,7 +208,7 @@ export default function FormTeksDetail() { const handleFileUnitChange = ( fileIndex: number, key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { setFileUnitSelections((prev) => { const newSelections = [...prev]; @@ -222,7 +228,7 @@ export default function FormTeksDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[fileIndex] || new Set() + newArray[fileIndex] || new Set(), ); if (value) { @@ -253,12 +259,12 @@ export default function FormTeksDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - currentFileCheckedLevels.has(Number(item.id)) + currentFileCheckedLevels.has(Number(item.id)), ); if (!hasSelectedPolda) { alert( - "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES.", ); return prev; // Batalkan perubahan } @@ -297,7 +303,7 @@ export default function FormTeksDetail() { useEffect(() => { if (detail?.assignedToTopLevel) { const outputSet = new Set( - detail.assignedToTopLevel.split(",").map(Number) + detail.assignedToTopLevel.split(",").map(Number), ); setUnitSelection({ semua: outputSet.has(0), @@ -322,7 +328,7 @@ export default function FormTeksDetail() { acc[polda.id] = false; return acc; }, - {} + {}, ); setExpandedPolda(initialExpandedState); console.log("polres", initialExpandedState); @@ -357,7 +363,7 @@ export default function FormTeksDetail() { const handleUnitChange = ( key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { if (key === "semua") { const newState = { @@ -436,7 +442,7 @@ export default function FormTeksDetail() { const handleCheckboxChange = (id: number) => { setSelectedPublishers((prev) => - prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id] + prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id], ); }; @@ -458,7 +464,7 @@ export default function FormTeksDetail() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -507,6 +513,9 @@ export default function FormTeksDetail() { console.log("detail", details); setFiles(details?.files); setDetail(details); + if (details?.uploadedBy?.userLevel?.levelNumber) { + setCreatorLevelNumber(details.uploadedBy.userLevel.levelNumber); + } setMain({ type: details?.fileType.name, url: details?.files[0]?.url, @@ -517,14 +526,14 @@ export default function FormTeksDetail() { if (details?.assignedToLevel) { const levels = new Set( - details.assignedToLevel.split(",").map(Number) + details.assignedToLevel.split(",").map(Number), ); setCheckedLevels(levels); } if (details?.publishedForObject) { const publisherIds = details?.publishedForObject?.map( - (obj: any) => obj.id + (obj: any) => obj.id, ); setSelectedPublishers(publisherIds); } @@ -696,7 +705,7 @@ export default function FormTeksDetail() { type: string, url: string, names: string, - format: string + format: string, ) => { console.log("Test 3 :", type, url, names, format); setMain({ @@ -723,7 +732,7 @@ export default function FormTeksDetail() { const setupPlacement = ( index: number, placement: string, - checked: boolean + checked: boolean, ) => { let temp = [...filePlacements]; if (checked) { @@ -734,7 +743,7 @@ export default function FormTeksDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Checklist semua item di modal @@ -784,7 +793,7 @@ export default function FormTeksDetail() { // Hanya auto-checklist "all" jika polda, polres, dan mabes ter-checklist // JANGAN include satker dalam perhitungan auto "all" const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length === 3 && !now.includes("all")) { now.push("all"); @@ -799,7 +808,7 @@ export default function FormTeksDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Unchecklist semua item di modal @@ -833,7 +842,7 @@ export default function FormTeksDetail() { // Hapus "all" jika tidak semua item ter-checklist if (now.includes("all")) { const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length < 3) { const newData = now.filter((b) => b !== "all"); @@ -851,7 +860,7 @@ export default function FormTeksDetail() { const updateModalChecklistLevels = ( fileIndex: number, placement: string, - checked: boolean + checked: boolean, ) => { if (!listDest || listDest.length === 0) return; @@ -884,7 +893,7 @@ export default function FormTeksDetail() { } else if (placement === "satker") { // Checklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.add(Number(satkerItem.id)); @@ -920,7 +929,7 @@ export default function FormTeksDetail() { } else if (placement === "satker") { // Unchecklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.delete(Number(satkerItem.id)); @@ -953,7 +962,7 @@ export default function FormTeksDetail() { // Fungsi untuk mengupdate checklist levels untuk file tertentu const handleFileCheckboxChangePlacement = ( fileIndex: number, - levelId: number + levelId: number, ) => { setFileCheckedLevels((prev) => { const newArray = [...prev]; @@ -965,7 +974,7 @@ export default function FormTeksDetail() { // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya const poldaItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if ( poldaItem && @@ -988,7 +997,7 @@ export default function FormTeksDetail() { // Jika ini adalah SATKER POLRI yang di-checklist, checklist juga semua sub-item di bawahnya const satkerItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if (satkerItem && satkerItem.name === "SATKER POLRI") { // Checklist semua sub-item di bawah SATKER POLRI (bukan POLRES) @@ -1019,7 +1028,7 @@ export default function FormTeksDetail() { // Hitung total POLDA yang ada (bukan SATKER POLRI) const totalPoldaCount = listDest.filter( - (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" + (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI", ).length; // Hitung berapa banyak POLDA yang ter-checklist (bukan SATKER POLRI) @@ -1046,7 +1055,7 @@ export default function FormTeksDetail() { } return total; }, - 0 + 0, ); // Hitung berapa banyak POLRES yang ter-checklist @@ -1056,7 +1065,7 @@ export default function FormTeksDetail() { return ( total + item.subDestination.filter((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ).length ); } @@ -1065,7 +1074,7 @@ export default function FormTeksDetail() { // Cek apakah SATKER POLRI ter-checklist const satkerItem = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); const isSatkerChecked = satkerItem && currentFileLevels.has(Number(satkerItem.id)); @@ -1099,7 +1108,7 @@ export default function FormTeksDetail() { // Cek apakah semua sub-items sudah ter-checklist const allSubItemsChecked = polda.subDestination?.every((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ); if (allSubItemsChecked) { @@ -1182,7 +1191,7 @@ export default function FormTeksDetail() { {detail && !categories.find( (cat) => - String(cat.id) === String(detail.category.id) + String(cat.id) === String(detail.category.id), ) && (
- {[ + {/* {[ { key: "semua", label: "Semua" }, { key: "nasional", label: "Nasional" }, { key: "wilayah", label: "Wilayah" }, @@ -1473,6 +1482,39 @@ export default function FormTeksDetail() { key: "international", label: "Internasional", }, + ] */} + {[ + { key: "semua", label: "Semua" }, + + ...(isContentFromMabesOrPolda + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + { + key: "wilayah", + label: "Wilayah", + }, + ] + : []), + + ...(isContentFromSatker + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + ] + : []), ].map((item, idx) => (
@@ -1510,251 +1552,262 @@ export default function FormTeksDetail() {
{/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {/* {fileUnitSelections[index]?.wilayah && ( */} + {!isContentFromSatker && + fileUnitSelections[index]?.wilayah && ( +
+

+ Detail Wilayah: +

- {/* Checkbox Sub-kategori dengan tombol Kustom sejajar */} -
- {[ - { key: "polda", label: "POLDA" }, - { key: "polres", label: "POLRES" }, - { key: "satker", label: "SATKER" }, - ].map((item, idx) => ( -
- { - handleFileUnitChange( - index, - item.key as keyof typeof unitSelection, - value as boolean - ); - setupPlacement( - index, - item.key, - Boolean(value) - ); - }} - /> -
-
- )} + )}
) : ( @@ -1833,7 +1886,7 @@ export default function FormTeksDetail() { > {template} - ) + ), )} diff --git a/components/form/content/teks-form.tsx b/components/form/content/teks-form.tsx index 35f8c069..c49cd6bc 100644 --- a/components/form/content/teks-form.tsx +++ b/components/form/content/teks-form.tsx @@ -1776,7 +1776,7 @@ export default function FormTeks() { {/* */} - {levelNumber !== "2" && levelNumber !== "3" && ( + {levelNumber !== "2" && ( diff --git a/components/form/content/video-detail-form.tsx b/components/form/content/video-detail-form.tsx index 98bca018..b4db143a 100644 --- a/components/form/content/video-detail-form.tsx +++ b/components/form/content/video-detail-form.tsx @@ -115,7 +115,7 @@ const ViewEditor = dynamic( () => { return import("@/components/editor/view-editor"); }, - { ssr: false } + { ssr: false }, ); interface Destination { @@ -190,6 +190,12 @@ export default function FormVideoDetail() { satker: boolean; }> >([]); + const [creatorLevelNumber, setCreatorLevelNumber] = useState( + null, + ); + const isContentFromSatker = creatorLevelNumber === 3; + const isContentFromMabesOrPolda = + creatorLevelNumber === 1 || creatorLevelNumber === 2; useEffect(() => { if (Number(userLevelId) === 216 && Number(roleId) === 3) { @@ -201,7 +207,7 @@ export default function FormVideoDetail() { const handleFileUnitChange = ( fileIndex: number, key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { setFileUnitSelections((prev) => { const newSelections = [...prev]; @@ -221,7 +227,7 @@ export default function FormVideoDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[fileIndex] || new Set() + newArray[fileIndex] || new Set(), ); if (value) { @@ -252,12 +258,12 @@ export default function FormVideoDetail() { (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" && - currentFileCheckedLevels.has(Number(item.id)) + currentFileCheckedLevels.has(Number(item.id)), ); if (!hasSelectedPolda) { alert( - "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES.", ); return prev; // Batalkan perubahan } @@ -296,7 +302,7 @@ export default function FormVideoDetail() { useEffect(() => { if (detail?.assignedToTopLevel) { const outputSet = new Set( - detail.assignedToTopLevel.split(",").map(Number) + detail.assignedToTopLevel.split(",").map(Number), ); setUnitSelection({ semua: outputSet.has(0), @@ -321,7 +327,7 @@ export default function FormVideoDetail() { acc[polda.id] = false; return acc; }, - {} + {}, ); setExpandedPolda(initialExpandedState); console.log("polres", initialExpandedState); @@ -356,7 +362,7 @@ export default function FormVideoDetail() { const handleUnitChange = ( key: keyof typeof unitSelection, - value: boolean + value: boolean, ) => { if (key === "semua") { const newState = { @@ -435,7 +441,7 @@ export default function FormVideoDetail() { const handleCheckboxChange = (id: number) => { setSelectedPublishers((prev) => - prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id] + prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id], ); }; @@ -457,7 +463,7 @@ export default function FormVideoDetail() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -480,6 +486,10 @@ export default function FormVideoDetail() { console.log("detail", details); setFiles(details?.files); setDetail(details); + if (details?.uploadedBy?.userLevel?.levelNumber) { + setCreatorLevelNumber(details.uploadedBy.userLevel.levelNumber); + } + setMain({ type: details?.fileType.name, url: details?.files[0]?.url, @@ -489,14 +499,14 @@ export default function FormVideoDetail() { if (details?.assignedToLevel) { const levels = new Set( - details.assignedToLevel.split(",").map(Number) + details.assignedToLevel.split(",").map(Number), ); setCheckedLevels(levels); } if (details?.publishedForObject) { const publisherIds = details?.publishedForObject?.map( - (obj: any) => obj.id + (obj: any) => obj.id, ); setSelectedPublishers(publisherIds); } @@ -506,7 +516,7 @@ export default function FormVideoDetail() { const filesData = details?.files || []; const fileUrls = filesData.map((files: { url: string }) => - files.url ? files.url : "default-image.jpg" + files.url ? files.url : "default-image.jpg", ); setDetailVideo(fileUrls); @@ -684,7 +694,7 @@ export default function FormVideoDetail() { const setupPlacement = ( index: number, placement: string, - checked: boolean + checked: boolean, ) => { let temp = [...filePlacements]; if (checked) { @@ -695,7 +705,7 @@ export default function FormVideoDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Checklist semua item di modal @@ -745,7 +755,7 @@ export default function FormVideoDetail() { // Hanya auto-checklist "all" jika polda, polres, dan mabes ter-checklist // JANGAN include satker dalam perhitungan auto "all" const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length === 3 && !now.includes("all")) { now.push("all"); @@ -760,7 +770,7 @@ export default function FormVideoDetail() { setFileCheckedLevels((prevLevels) => { const newArray = [...prevLevels]; const currentFileLevels = new Set( - newArray[index] || new Set() + newArray[index] || new Set(), ); // Unchecklist semua item di modal @@ -794,7 +804,7 @@ export default function FormVideoDetail() { // Hapus "all" jika tidak semua item ter-checklist if (now.includes("all")) { const nonSatkerItems = now.filter( - (item) => item !== "satker" && item !== "all" + (item) => item !== "satker" && item !== "all", ); if (nonSatkerItems.length < 3) { const newData = now.filter((b) => b !== "all"); @@ -812,7 +822,7 @@ export default function FormVideoDetail() { const updateModalChecklistLevels = ( fileIndex: number, placement: string, - checked: boolean + checked: boolean, ) => { if (!listDest || listDest.length === 0) return; @@ -845,7 +855,7 @@ export default function FormVideoDetail() { } else if (placement === "satker") { // Checklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.add(Number(satkerItem.id)); @@ -881,7 +891,7 @@ export default function FormVideoDetail() { } else if (placement === "satker") { // Unchecklist SATKER POLRI dan semua sub-item di bawahnya const satkerItem: any = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); if (satkerItem) { currentFileLevels.delete(Number(satkerItem.id)); @@ -910,7 +920,7 @@ export default function FormVideoDetail() { type: string, url: string, names: string, - format: string + format: string, ) => { console.log("Test 3 :", type, url, names, format); setMain({ @@ -951,7 +961,7 @@ export default function FormVideoDetail() { // Fungsi untuk mengupdate checklist levels untuk file tertentu const handleFileCheckboxChangePlacement = ( fileIndex: number, - levelId: number + levelId: number, ) => { setFileCheckedLevels((prev) => { const newArray = [...prev]; @@ -963,7 +973,7 @@ export default function FormVideoDetail() { // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya const poldaItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if ( poldaItem && @@ -986,7 +996,7 @@ export default function FormVideoDetail() { // Jika ini adalah SATKER POLRI yang di-checklist, checklist juga semua sub-item di bawahnya const satkerItem = listDest.find( - (item: any) => Number(item.id) === levelId + (item: any) => Number(item.id) === levelId, ) as any; if (satkerItem && satkerItem.name === "SATKER POLRI") { // Checklist semua sub-item di bawah SATKER POLRI (bukan POLRES) @@ -1017,7 +1027,7 @@ export default function FormVideoDetail() { // Hitung total POLDA yang ada (bukan SATKER POLRI) const totalPoldaCount = listDest.filter( - (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" + (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI", ).length; // Hitung berapa banyak POLDA yang ter-checklist (bukan SATKER POLRI) @@ -1044,7 +1054,7 @@ export default function FormVideoDetail() { } return total; }, - 0 + 0, ); // Hitung berapa banyak POLRES yang ter-checklist @@ -1054,7 +1064,7 @@ export default function FormVideoDetail() { return ( total + item.subDestination.filter((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ).length ); } @@ -1063,7 +1073,7 @@ export default function FormVideoDetail() { // Cek apakah SATKER POLRI ter-checklist const satkerItem = listDest.find( - (item: any) => item.name === "SATKER POLRI" + (item: any) => item.name === "SATKER POLRI", ); const isSatkerChecked = satkerItem && currentFileLevels.has(Number(satkerItem.id)); @@ -1097,7 +1107,7 @@ export default function FormVideoDetail() { // Cek apakah semua sub-items sudah ter-checklist const allSubItemsChecked = polda.subDestination?.every((sub: any) => - currentFileLevels.has(Number(sub.id)) + currentFileLevels.has(Number(sub.id)), ); if (allSubItemsChecked) { @@ -1180,7 +1190,7 @@ export default function FormVideoDetail() { {detail && !categories.find( (cat) => - String(cat.id) === String(detail.category.id) + String(cat.id) === String(detail.category.id), ) && (
- {[ + {/* {[ { key: "semua", label: "Semua" }, { key: "nasional", label: "Nasional" }, { key: "wilayah", label: "Wilayah" }, @@ -1473,6 +1483,39 @@ export default function FormVideoDetail() { key: "international", label: "Internasional", }, + ] */} + {[ + { key: "semua", label: "Semua" }, + + ...(isContentFromMabesOrPolda + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + { + key: "wilayah", + label: "Wilayah", + }, + ] + : []), + + ...(isContentFromSatker + ? [ + { + key: "nasional", + label: "Nasional", + }, + { + key: "international", + label: "Internasional", + }, + ] + : []), ].map((item, idx) => (
@@ -1510,251 +1553,262 @@ export default function FormVideoDetail() {
{/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {/* {fileUnitSelections[index]?.wilayah && ( */} + {!isContentFromSatker && + fileUnitSelections[index]?.wilayah && ( +
+

+ Detail Wilayah: +

- {/* Checkbox Sub-kategori dengan tombol Kustom sejajar */} -
- {[ - { key: "polda", label: "POLDA" }, - { key: "polres", label: "POLRES" }, - { key: "satker", label: "SATKER" }, - ].map((item, idx) => ( -
- { - handleFileUnitChange( - index, - item.key as keyof typeof unitSelection, - value as boolean - ); - setupPlacement( - index, - item.key, - Boolean(value) - ); - }} - /> -
-
- )} + )}
) : ( @@ -1833,7 +1887,7 @@ export default function FormVideoDetail() { > {template} - ) + ), )} diff --git a/components/form/content/video-form.tsx b/components/form/content/video-form.tsx index 2c502dec..2cce5e32 100644 --- a/components/form/content/video-form.tsx +++ b/components/form/content/video-form.tsx @@ -59,7 +59,7 @@ const CustomEditor = dynamic( () => { return import("@/components/editor/custom-editor"); }, - { ssr: false } + { ssr: false }, ); interface FileWithPreview extends File { @@ -111,11 +111,11 @@ export default function FormVideo() { const [isGeneratedArticle, setIsGeneratedArticle] = useState(false); const [articleBody, setArticleBody] = useState(""); const [selectedArticleId, setSelectedArticleId] = useState( - null + null, ); const [selectedMainKeyword, setSelectedMainKeyword] = useState(""); const [publishedForError, setPublishedForError] = useState( - null + null, ); const [selectedSize, setSelectedSize] = useState(""); const [detailData, setDetailData] = useState(null); @@ -184,7 +184,7 @@ export default function FormVideo() { } const filesWithPreview = acceptedFiles.map((file) => - Object.assign(file, { preview: URL.createObjectURL(file) }) + Object.assign(file, { preview: URL.createObjectURL(file) }), ); setFiles((prev) => { @@ -211,11 +211,11 @@ export default function FormVideo() { .refine( (files) => files.every((file: File) => ACCEPTED_FILE_TYPES.includes(file.type)), - { message: "File harus berformat mp4 atau mov" } + { message: "File harus berformat mp4 atau mov" }, ) .refine( (files) => files.every((file: File) => file.size <= MAX_FILE_SIZE), - { message: "Ukuran file maksimal 100 MB" } + { message: "Ukuran file maksimal 100 MB" }, ), publishedFor: z .array(z.string()) @@ -423,7 +423,7 @@ export default function FormVideo() { const articleData = await waitForStatusUpdate(); const cleanArticleBody = articleData?.articleBody?.replace( /]*>/g, - "" + "", ); const articleImagesData = articleData?.imagesUrl?.split(","); setValue("description", cleanArticleBody || ""); @@ -479,7 +479,7 @@ export default function FormVideo() { if (scheduleId && scheduleType === "3") { const findCategory = resCategory.find((o) => - o.name.toLowerCase().includes("pers rilis") + o.name.toLowerCase().includes("pers rilis"), ); if (findCategory) { @@ -502,7 +502,7 @@ export default function FormVideo() { setPublishedFor( options .filter((opt: any) => opt.id !== "all") - .map((opt: any) => opt.id) + .map((opt: any) => opt.id), ); } } else { @@ -561,8 +561,8 @@ export default function FormVideo() { translatedTitle && translatedTitle.trim() !== "" ? translatedTitle : isSwitchOn - ? title - : data.title; + ? title + : data.title; // Tentukan deskripsi final: // Jika ada hasil translate, kirim itu ke backend @@ -570,10 +570,10 @@ export default function FormVideo() { translatedContent && translatedContent.trim() !== "" ? translatedContent : isSwitchOn - ? data.description - : selectedFileType === "rewrite" - ? data.rewriteDescription - : data.descriptionOri; + ? data.description + : selectedFileType === "rewrite" + ? data.rewriteDescription + : data.descriptionOri; if (!finalDescription?.trim()) { MySwal.fire("Error", "Deskripsi tidak boleh kosong.", "error"); @@ -695,7 +695,7 @@ export default function FormVideo() { idx: number, id: string, file: any, - duration: string + duration: string, ) { console.log(idx, id, file, duration); @@ -731,7 +731,7 @@ export default function FormVideo() { onChunkComplete: ( chunkSize: any, bytesAccepted: any, - bytesTotal: any + bytesTotal: any, ) => { const uploadPersen = Math.floor((bytesAccepted / bytesTotal) * 100); progressInfo[idx].percentage = uploadPersen; @@ -791,8 +791,8 @@ export default function FormVideo() { const handleImageChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { - setThumbnail(file); - setPreview(URL.createObjectURL(file)); + setThumbnail(file); + setPreview(URL.createObjectURL(file)); console.log("Selected Thumbnail:", file); } }; @@ -823,7 +823,7 @@ export default function FormVideo() {
+ >
{/*
{renderFilePreview(file)}
*/} { const updatedTags = field.value.filter( - (_, i) => i !== index + (_, i) => i !== index, ); field.onChange(updatedTags); }} @@ -1825,7 +1825,7 @@ export default function FormVideo() { {/* */} - {levelNumber !== "2" && levelNumber !== "3" && ( + {levelNumber !== "2" && ( diff --git a/components/maps/client-config.tsx b/components/maps/client-config.tsx index 5b6e64a6..a1dd416a 100644 --- a/components/maps/client-config.tsx +++ b/components/maps/client-config.tsx @@ -1 +1,2 @@ -export const GoogleMapsAPI = "AIzaSyCuQHorDceMCzlSgrB9AEY5ns8KeriFsME"; +// export const GoogleMapsAPI = "AIzaSyCuQHorDceMCzlSgrB9AEY5ns8KeriFsME"; +export const GoogleMapsAPI = "AIzaSyA-Dci9RP4ZjyJCFfy74WvhtMZXSDLTPMQ";