From ae6e22e05f5a9b29d799c3fa110dc095388484e0 Mon Sep 17 00:00:00 2001 From: Sabda Yagra Date: Mon, 15 Dec 2025 20:41:18 +0700 Subject: [PATCH] fix: placement content satker --- components/form/content/audio-detail-form.tsx | 231 +++++- components/form/content/image-detail-form.tsx | 694 +++++++++++------- components/form/content/teks-detail-form.tsx | 230 +++++- components/form/content/video-detail-form.tsx | 692 ++++++++++------- 4 files changed, 1262 insertions(+), 585 deletions(-) diff --git a/components/form/content/audio-detail-form.tsx b/components/form/content/audio-detail-form.tsx index cc7ce695..cac785b2 100644 --- a/components/form/content/audio-detail-form.tsx +++ b/components/form/content/audio-detail-form.tsx @@ -184,6 +184,10 @@ export default function FormAudioDetail() { const [isLoading, setIsLoading] = useState(false); const [listDest, setListDest] = useState([]); const [checkedLevels, setCheckedLevels] = useState(new Set()); + + const isUploadedBySatkerLevel3 = + Number(detail?.uploadedBy?.userLevel?.levelNumber) === 3; + // State untuk setiap file secara individual - checklist levels const [fileCheckedLevels, setFileCheckedLevels] = useState< Array> @@ -218,42 +222,60 @@ export default function FormAudioDetail() { const currentSelection = { ...newSelections[fileIndex] }; if (key === "semua") { - // Jika klik Semua, set semua value ke true/false currentSelection.semua = value; currentSelection.nasional = value; - currentSelection.wilayah = value; currentSelection.international = value; - currentSelection.polda = value; - currentSelection.polres = value; - currentSelection.satker = value; - // Update fileCheckedLevels untuk sinkronisasi dengan modal - setFileCheckedLevels((prevLevels) => { - const newArray = [...prevLevels]; - const currentFileLevels = new Set( - newArray[fileIndex] || new Set() - ); + if (isUploadedBySatkerLevel3) { + currentSelection.wilayah = false; + currentSelection.polda = false; + currentSelection.polres = false; + currentSelection.satker = false; - if (value) { - // Checklist semua item di modal - listDest.forEach((item: any) => { - currentFileLevels.add(Number(item.id)); - if (item.subDestination) { - item.subDestination.forEach((sub: any) => { - currentFileLevels.add(Number(sub.id)); - }); - } - }); - } else { - // Unchecklist semua item di modal - currentFileLevels.clear(); - } + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); - newArray[fileIndex] = currentFileLevels; - return newArray; - }); + if (!value) { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } else { + // 🔁 LOGIC LAMA (TIDAK DIUBAH) + currentSelection.wilayah = value; + currentSelection.polda = value; + currentSelection.polres = value; + currentSelection.satker = value; + + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); + + if (value) { + listDest.forEach((item: any) => { + currentFileLevels.add(Number(item.id)); + if (item.subDestination) { + item.subDestination.forEach((sub: any) => { + currentFileLevels.add(Number(sub.id)); + }); + } + }); + } else { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } } else { - // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist if (key === "polres" && value) { const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; const hasSelectedPolda = @@ -269,14 +291,12 @@ export default function FormAudioDetail() { alert( "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." ); - return prev; // Batalkan perubahan + return prev; } } - // Update salah satu saja currentSelection[key] = value; - // Cek apakah semua selain "semua" sudah dicentang const allChecked = [ "nasional", "wilayah", @@ -294,6 +314,92 @@ export default function FormAudioDetail() { }); }; + // const handleFileUnitChange = ( + // fileIndex: number, + // key: keyof typeof unitSelection, + // value: boolean + // ) => { + // setFileUnitSelections((prev) => { + // const newSelections = [...prev]; + // const currentSelection = { ...newSelections[fileIndex] }; + + // if (key === "semua") { + // // Jika klik Semua, set semua value ke true/false + // currentSelection.semua = value; + // currentSelection.nasional = value; + // currentSelection.wilayah = value; + // currentSelection.international = value; + // currentSelection.polda = value; + // currentSelection.polres = value; + // currentSelection.satker = value; + + // // Update fileCheckedLevels untuk sinkronisasi dengan modal + // setFileCheckedLevels((prevLevels) => { + // const newArray = [...prevLevels]; + // const currentFileLevels = new Set( + // newArray[fileIndex] || new Set() + // ); + + // if (value) { + // // Checklist semua item di modal + // listDest.forEach((item: any) => { + // currentFileLevels.add(Number(item.id)); + // if (item.subDestination) { + // item.subDestination.forEach((sub: any) => { + // currentFileLevels.add(Number(sub.id)); + // }); + // } + // }); + // } else { + // // Unchecklist semua item di modal + // currentFileLevels.clear(); + // } + + // newArray[fileIndex] = currentFileLevels; + // return newArray; + // }); + // } else { + // // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist + // if (key === "polres" && value) { + // const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; + // const hasSelectedPolda = + // currentFileCheckedLevels && + // listDest.some( + // (item: any) => + // item.levelNumber === 2 && + // item.name !== "SATKER POLRI" && + // currentFileCheckedLevels.has(Number(item.id)) + // ); + + // if (!hasSelectedPolda) { + // alert( + // "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + // ); + // return prev; // Batalkan perubahan + // } + // } + + // // Update salah satu saja + // currentSelection[key] = value; + + // // Cek apakah semua selain "semua" sudah dicentang + // const allChecked = [ + // "nasional", + // "wilayah", + // "international", + // "polda", + // "polres", + // "satker", + // ].every((k) => currentSelection[k as keyof typeof unitSelection]); + + // currentSelection.semua = allChecked; + // } + + // newSelections[fileIndex] = currentSelection; + // return newSelections; + // }); + // }; + const toggleExpand = (id: number) => { setExpandedPolda((prev) => ({ ...prev, @@ -718,8 +824,15 @@ export default function FormAudioDetail() { ) => { let temp = [...filePlacements]; if (checked) { + // if (placement === "all") { + // temp[index] = ["all", "mabes", "polda", "international"]; + if (placement === "all") { - temp[index] = ["all", "mabes", "polda", "international"]; + if (isUploadedBySatkerLevel3) { + temp[index] = ["mabes", "international"]; + } else { + temp[index] = ["all", "mabes", "polda", "international"]; + } // Update fileCheckedLevels untuk sinkronisasi dengan modal ketika "all" diklik setFileCheckedLevels((prevLevels) => { @@ -1477,6 +1590,56 @@ export default function FormAudioDetail() { key: "international", label: "Internasional", }, + ] + .filter( + (item) => + !( + isUploadedBySatkerLevel3 && + item.key === "wilayah" + ) + ) + .map((item) => ( +
+ { + handleFileUnitChange( + index, + item.key as keyof typeof unitSelection, + value as boolean + ); + setupPlacement( + index, + item.key, + Boolean(value) + ); + }} + /> + +
+ ))} + + {/* {[ + { key: "semua", label: "Semua" }, + { key: "nasional", label: "Nasional" }, + { key: "wilayah", label: "Wilayah" }, + { + key: "international", + label: "Internasional", + }, ].map((item, idx) => (
- ))} + ))} */} diff --git a/components/form/content/image-detail-form.tsx b/components/form/content/image-detail-form.tsx index 657994a2..014e6dcd 100644 --- a/components/form/content/image-detail-form.tsx +++ b/components/form/content/image-detail-form.tsx @@ -474,42 +474,69 @@ export default function FormImageDetail() { const currentSelection = { ...newSelections[fileIndex] }; if (key === "semua") { - // Jika klik Semua, set semua value ke true/false + // Jika klik Semua currentSelection.semua = value; + + // ✅ Tetap berlaku untuk semua kondisi currentSelection.nasional = value; - currentSelection.wilayah = value; currentSelection.international = value; - currentSelection.polda = value; - currentSelection.polres = value; - currentSelection.satker = value; - // Update fileCheckedLevels untuk sinkronisasi dengan modal - setFileCheckedLevels((prevLevels) => { - const newArray = [...prevLevels]; - const currentFileLevels = new Set( - newArray[fileIndex] || new Set() - ); + if (isUploadedBySatkerLevel3) { + // 🔹 TAMBAHAN: KHUSUS SATKER level 3 + currentSelection.wilayah = false; + currentSelection.polda = false; + currentSelection.polres = false; + currentSelection.satker = false; - if (value) { - // Checklist semua item di modal - listDest.forEach((item: any) => { - currentFileLevels.add(Number(item.id)); - if (item.subDestination) { - item.subDestination.forEach((sub: any) => { - currentFileLevels.add(Number(sub.id)); - }); - } - }); - } else { - // Unchecklist semua item di modal - currentFileLevels.clear(); - } + // 🔹 Sinkronisasi modal: JANGAN checklist wilayah + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); - newArray[fileIndex] = currentFileLevels; - return newArray; - }); + if (!value) { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } else { + // 🔁 LOGIC LAMA (TIDAK DIUBAH) + currentSelection.wilayah = value; + currentSelection.polda = value; + currentSelection.polres = value; + currentSelection.satker = value; + + // LOGIC LAMA modal + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); + + if (value) { + listDest.forEach((item: any) => { + currentFileLevels.add(Number(item.id)); + if (item.subDestination) { + item.subDestination.forEach((sub: any) => { + currentFileLevels.add(Number(sub.id)); + }); + } + }); + } else { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } } else { - // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist + // 🔁 SELURUH LOGIC LAMA — TIDAK DISENTUH + + // Validasi khusus untuk POLRES if (key === "polres" && value) { const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; const hasSelectedPolda = @@ -525,14 +552,12 @@ export default function FormImageDetail() { alert( "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." ); - return prev; // Batalkan perubahan + return prev; } } - // Update salah satu saja currentSelection[key] = value; - // Cek apakah semua selain "semua" sudah dicentang const allChecked = [ "nasional", "wilayah", @@ -550,6 +575,92 @@ export default function FormImageDetail() { }); }; + // const handleFileUnitChange = ( + // fileIndex: number, + // key: keyof typeof unitSelection, + // value: boolean + // ) => { + // setFileUnitSelections((prev) => { + // const newSelections = [...prev]; + // const currentSelection = { ...newSelections[fileIndex] }; + + // if (key === "semua") { + // // Jika klik Semua, set semua value ke true/false + // currentSelection.semua = value; + // currentSelection.nasional = value; + // currentSelection.wilayah = value; + // currentSelection.international = value; + // currentSelection.polda = value; + // currentSelection.polres = value; + // currentSelection.satker = value; + + // // Update fileCheckedLevels untuk sinkronisasi dengan modal + // setFileCheckedLevels((prevLevels) => { + // const newArray = [...prevLevels]; + // const currentFileLevels = new Set( + // newArray[fileIndex] || new Set() + // ); + + // if (value) { + // // Checklist semua item di modal + // listDest.forEach((item: any) => { + // currentFileLevels.add(Number(item.id)); + // if (item.subDestination) { + // item.subDestination.forEach((sub: any) => { + // currentFileLevels.add(Number(sub.id)); + // }); + // } + // }); + // } else { + // // Unchecklist semua item di modal + // currentFileLevels.clear(); + // } + + // newArray[fileIndex] = currentFileLevels; + // return newArray; + // }); + // } else { + // // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist + // if (key === "polres" && value) { + // const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; + // const hasSelectedPolda = + // currentFileCheckedLevels && + // listDest.some( + // (item: any) => + // item.levelNumber === 2 && + // item.name !== "SATKER POLRI" && + // currentFileCheckedLevels.has(Number(item.id)) + // ); + + // if (!hasSelectedPolda) { + // alert( + // "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + // ); + // return prev; // Batalkan perubahan + // } + // } + + // // Update salah satu saja + // currentSelection[key] = value; + + // // Cek apakah semua selain "semua" sudah dicentang + // const allChecked = [ + // "nasional", + // "wilayah", + // "international", + // "polda", + // "polres", + // "satker", + // ].every((k) => currentSelection[k as keyof typeof unitSelection]); + + // currentSelection.semua = allChecked; + // } + + // newSelections[fileIndex] = currentSelection; + // return newSelections; + // }); + // }; + // Fungsi lama untuk kompatibilitas (akan dihapus nanti) const handleUnitChange = ( key: keyof typeof unitSelection, @@ -1088,8 +1199,14 @@ export default function FormImageDetail() { ) => { let temp = [...filePlacements]; if (checked) { + // if (placement === "all") { + // temp[index] = ["all", "mabes", "polda", "international"]; if (placement === "all") { - temp[index] = ["all", "mabes", "polda", "international"]; + if (isUploadedBySatkerLevel3) { + temp[index] = ["mabes", "international"]; + } else { + temp[index] = ["all", "mabes", "polda", "international"]; + } // Update fileCheckedLevels untuk sinkronisasi dengan modal ketika "all" diklik setFileCheckedLevels((prevLevels) => { @@ -1359,6 +1476,9 @@ export default function FormImageDetail() { // console.log("portrai", portraitMap); }, [portraitMap]); + const isUploadedBySatkerLevel3 = + Number(detail?.uploadedBy?.userLevel?.levelNumber) === 3; + return (
{detail !== undefined ? ( @@ -1741,6 +1861,56 @@ export default function FormImageDetail() { key: "international", label: "Internasional", }, + ] + .filter( + (item) => + !( + isUploadedBySatkerLevel3 && + item.key === "wilayah" + ) + ) + .map((item) => ( +
+ { + handleFileUnitChange( + index, + item.key as keyof typeof unitSelection, + value as boolean + ); + setupPlacement( + index, + item.key, + Boolean(value) + ); + }} + /> + +
+ ))} + + {/* {[ + { key: "semua", label: "Semua" }, + { key: "nasional", label: "Nasional" }, + { key: "wilayah", label: "Wilayah" }, + { + key: "international", + label: "Internasional", + }, ].map((item, idx) => (
- ))} + ))} */} {/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {fileUnitSelections[index]?.wilayah && + !isUploadedBySatkerLevel3 && ( +
+

+ 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) - ); - }} - /> -
+
+ + + + + + +
+ + +
- - )} + )} ) : ( diff --git a/components/form/content/teks-detail-form.tsx b/components/form/content/teks-detail-form.tsx index a5cacbe1..adf574f3 100644 --- a/components/form/content/teks-detail-form.tsx +++ b/components/form/content/teks-detail-form.tsx @@ -207,42 +207,60 @@ export default function FormTeksDetail() { const currentSelection = { ...newSelections[fileIndex] }; if (key === "semua") { - // Jika klik Semua, set semua value ke true/false currentSelection.semua = value; currentSelection.nasional = value; - currentSelection.wilayah = value; currentSelection.international = value; - currentSelection.polda = value; - currentSelection.polres = value; - currentSelection.satker = value; - // Update fileCheckedLevels untuk sinkronisasi dengan modal - setFileCheckedLevels((prevLevels) => { - const newArray = [...prevLevels]; - const currentFileLevels = new Set( - newArray[fileIndex] || new Set() - ); + if (isUploadedBySatkerLevel3) { + currentSelection.wilayah = false; + currentSelection.polda = false; + currentSelection.polres = false; + currentSelection.satker = false; - if (value) { - // Checklist semua item di modal - listDest.forEach((item: any) => { - currentFileLevels.add(Number(item.id)); - if (item.subDestination) { - item.subDestination.forEach((sub: any) => { - currentFileLevels.add(Number(sub.id)); - }); - } - }); - } else { - // Unchecklist semua item di modal - currentFileLevels.clear(); - } + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); - newArray[fileIndex] = currentFileLevels; - return newArray; - }); + if (!value) { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } else { + // 🔁 LOGIC LAMA (TIDAK DIUBAH) + currentSelection.wilayah = value; + currentSelection.polda = value; + currentSelection.polres = value; + currentSelection.satker = value; + + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); + + if (value) { + listDest.forEach((item: any) => { + currentFileLevels.add(Number(item.id)); + if (item.subDestination) { + item.subDestination.forEach((sub: any) => { + currentFileLevels.add(Number(sub.id)); + }); + } + }); + } else { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } } else { - // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist if (key === "polres" && value) { const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; const hasSelectedPolda = @@ -258,14 +276,12 @@ export default function FormTeksDetail() { alert( "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." ); - return prev; // Batalkan perubahan + return prev; } } - // Update salah satu saja currentSelection[key] = value; - // Cek apakah semua selain "semua" sudah dicentang const allChecked = [ "nasional", "wilayah", @@ -283,6 +299,92 @@ export default function FormTeksDetail() { }); }; + // const handleFileUnitChange = ( + // fileIndex: number, + // key: keyof typeof unitSelection, + // value: boolean + // ) => { + // setFileUnitSelections((prev) => { + // const newSelections = [...prev]; + // const currentSelection = { ...newSelections[fileIndex] }; + + // if (key === "semua") { + // // Jika klik Semua, set semua value ke true/false + // currentSelection.semua = value; + // currentSelection.nasional = value; + // currentSelection.wilayah = value; + // currentSelection.international = value; + // currentSelection.polda = value; + // currentSelection.polres = value; + // currentSelection.satker = value; + + // // Update fileCheckedLevels untuk sinkronisasi dengan modal + // setFileCheckedLevels((prevLevels) => { + // const newArray = [...prevLevels]; + // const currentFileLevels = new Set( + // newArray[fileIndex] || new Set() + // ); + + // if (value) { + // // Checklist semua item di modal + // listDest.forEach((item: any) => { + // currentFileLevels.add(Number(item.id)); + // if (item.subDestination) { + // item.subDestination.forEach((sub: any) => { + // currentFileLevels.add(Number(sub.id)); + // }); + // } + // }); + // } else { + // // Unchecklist semua item di modal + // currentFileLevels.clear(); + // } + + // newArray[fileIndex] = currentFileLevels; + // return newArray; + // }); + // } else { + // // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist + // if (key === "polres" && value) { + // const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; + // const hasSelectedPolda = + // currentFileCheckedLevels && + // listDest.some( + // (item: any) => + // item.levelNumber === 2 && + // item.name !== "SATKER POLRI" && + // currentFileCheckedLevels.has(Number(item.id)) + // ); + + // if (!hasSelectedPolda) { + // alert( + // "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + // ); + // return prev; // Batalkan perubahan + // } + // } + + // // Update salah satu saja + // currentSelection[key] = value; + + // // Cek apakah semua selain "semua" sudah dicentang + // const allChecked = [ + // "nasional", + // "wilayah", + // "international", + // "polda", + // "polres", + // "satker", + // ].every((k) => currentSelection[k as keyof typeof unitSelection]); + + // currentSelection.semua = allChecked; + // } + + // newSelections[fileIndex] = currentSelection; + // return newSelections; + // }); + // }; + let fileTypeId = "3"; const toggleExpand = (id: number) => { @@ -725,8 +827,15 @@ export default function FormTeksDetail() { ) => { let temp = [...filePlacements]; if (checked) { + // if (placement === "all") { + // temp[index] = ["all", "mabes", "polda", "international"]; + if (placement === "all") { - temp[index] = ["all", "mabes", "polda", "international"]; + if (isUploadedBySatkerLevel3) { + temp[index] = ["mabes", "international"]; + } else { + temp[index] = ["all", "mabes", "polda", "international"]; + } // Update fileCheckedLevels untuk sinkronisasi dengan modal ketika "all" diklik setFileCheckedLevels((prevLevels) => { @@ -1126,6 +1235,9 @@ export default function FormTeksDetail() { }); }; + const isUploadedBySatkerLevel3 = + Number(detail?.uploadedBy?.userLevel?.levelNumber) === 3; + return ( {detail !== undefined ? ( @@ -1471,6 +1583,56 @@ export default function FormTeksDetail() { key: "international", label: "Internasional", }, + ] + .filter( + (item) => + !( + isUploadedBySatkerLevel3 && + item.key === "wilayah" + ) + ) + .map((item) => ( +
+ { + handleFileUnitChange( + index, + item.key as keyof typeof unitSelection, + value as boolean + ); + setupPlacement( + index, + item.key, + Boolean(value) + ); + }} + /> + +
+ ))} + + {/* {[ + { key: "semua", label: "Semua" }, + { key: "nasional", label: "Nasional" }, + { key: "wilayah", label: "Wilayah" }, + { + key: "international", + label: "Internasional", + }, ].map((item, idx) => (
- ))} + ))} */} diff --git a/components/form/content/video-detail-form.tsx b/components/form/content/video-detail-form.tsx index 3c00999d..33d108a9 100644 --- a/components/form/content/video-detail-form.tsx +++ b/components/form/content/video-detail-form.tsx @@ -210,42 +210,60 @@ export default function FormVideoDetail() { const currentSelection = { ...newSelections[fileIndex] }; if (key === "semua") { - // Jika klik Semua, set semua value ke true/false currentSelection.semua = value; currentSelection.nasional = value; - currentSelection.wilayah = value; currentSelection.international = value; - currentSelection.polda = value; - currentSelection.polres = value; - currentSelection.satker = value; - // Update fileCheckedLevels untuk sinkronisasi dengan modal - setFileCheckedLevels((prevLevels) => { - const newArray = [...prevLevels]; - const currentFileLevels = new Set( - newArray[fileIndex] || new Set() - ); + if (isUploadedBySatkerLevel3) { + currentSelection.wilayah = false; + currentSelection.polda = false; + currentSelection.polres = false; + currentSelection.satker = false; - if (value) { - // Checklist semua item di modal - listDest.forEach((item: any) => { - currentFileLevels.add(Number(item.id)); - if (item.subDestination) { - item.subDestination.forEach((sub: any) => { - currentFileLevels.add(Number(sub.id)); - }); - } - }); - } else { - // Unchecklist semua item di modal - currentFileLevels.clear(); - } + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); - newArray[fileIndex] = currentFileLevels; - return newArray; - }); + if (!value) { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } else { + // 🔁 LOGIC LAMA (TIDAK DIUBAH) + currentSelection.wilayah = value; + currentSelection.polda = value; + currentSelection.polres = value; + currentSelection.satker = value; + + setFileCheckedLevels((prevLevels) => { + const newArray = [...prevLevels]; + const currentFileLevels = new Set( + newArray[fileIndex] || new Set() + ); + + if (value) { + listDest.forEach((item: any) => { + currentFileLevels.add(Number(item.id)); + if (item.subDestination) { + item.subDestination.forEach((sub: any) => { + currentFileLevels.add(Number(sub.id)); + }); + } + }); + } else { + currentFileLevels.clear(); + } + + newArray[fileIndex] = currentFileLevels; + return newArray; + }); + } } else { - // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist if (key === "polres" && value) { const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; const hasSelectedPolda = @@ -261,14 +279,12 @@ export default function FormVideoDetail() { alert( "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." ); - return prev; // Batalkan perubahan + return prev; } } - // Update salah satu saja currentSelection[key] = value; - // Cek apakah semua selain "semua" sudah dicentang const allChecked = [ "nasional", "wilayah", @@ -286,6 +302,92 @@ export default function FormVideoDetail() { }); }; + // const handleFileUnitChange = ( + // fileIndex: number, + // key: keyof typeof unitSelection, + // value: boolean + // ) => { + // setFileUnitSelections((prev) => { + // const newSelections = [...prev]; + // const currentSelection = { ...newSelections[fileIndex] }; + + // if (key === "semua") { + // // Jika klik Semua, set semua value ke true/false + // currentSelection.semua = value; + // currentSelection.nasional = value; + // currentSelection.wilayah = value; + // currentSelection.international = value; + // currentSelection.polda = value; + // currentSelection.polres = value; + // currentSelection.satker = value; + + // // Update fileCheckedLevels untuk sinkronisasi dengan modal + // setFileCheckedLevels((prevLevels) => { + // const newArray = [...prevLevels]; + // const currentFileLevels = new Set( + // newArray[fileIndex] || new Set() + // ); + + // if (value) { + // // Checklist semua item di modal + // listDest.forEach((item: any) => { + // currentFileLevels.add(Number(item.id)); + // if (item.subDestination) { + // item.subDestination.forEach((sub: any) => { + // currentFileLevels.add(Number(sub.id)); + // }); + // } + // }); + // } else { + // // Unchecklist semua item di modal + // currentFileLevels.clear(); + // } + + // newArray[fileIndex] = currentFileLevels; + // return newArray; + // }); + // } else { + // // Validasi khusus untuk POLRES - harus ada POLDA yang ter-checklist + // if (key === "polres" && value) { + // const currentFileCheckedLevels = fileCheckedLevels[fileIndex]; + // const hasSelectedPolda = + // currentFileCheckedLevels && + // listDest.some( + // (item: any) => + // item.levelNumber === 2 && + // item.name !== "SATKER POLRI" && + // currentFileCheckedLevels.has(Number(item.id)) + // ); + + // if (!hasSelectedPolda) { + // alert( + // "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + // ); + // return prev; // Batalkan perubahan + // } + // } + + // // Update salah satu saja + // currentSelection[key] = value; + + // // Cek apakah semua selain "semua" sudah dicentang + // const allChecked = [ + // "nasional", + // "wilayah", + // "international", + // "polda", + // "polres", + // "satker", + // ].every((k) => currentSelection[k as keyof typeof unitSelection]); + + // currentSelection.semua = allChecked; + // } + + // newSelections[fileIndex] = currentSelection; + // return newSelections; + // }); + // }; + let fileTypeId = "2"; const toggleExpand = (id: number) => { @@ -690,8 +792,15 @@ export default function FormVideoDetail() { ) => { let temp = [...filePlacements]; if (checked) { + // if (placement === "all") { + // temp[index] = ["all", "mabes", "polda", "international"]; + if (placement === "all") { - temp[index] = ["all", "mabes", "polda", "international"]; + if (isUploadedBySatkerLevel3) { + temp[index] = ["mabes", "international"]; + } else { + temp[index] = ["all", "mabes", "polda", "international"]; + } // Update fileCheckedLevels untuk sinkronisasi dengan modal ketika "all" diklik setFileCheckedLevels((prevLevels) => { @@ -1128,6 +1237,9 @@ export default function FormVideoDetail() { }); }; + const isUploadedBySatkerLevel3 = + Number(detail?.uploadedBy?.userLevel?.levelNumber) === 3; + return ( {detail !== undefined ? ( @@ -1475,6 +1587,56 @@ export default function FormVideoDetail() { key: "international", label: "Internasional", }, + ] + .filter( + (item) => + !( + isUploadedBySatkerLevel3 && + item.key === "wilayah" + ) + ) + .map((item) => ( +
+ { + handleFileUnitChange( + index, + item.key as keyof typeof unitSelection, + value as boolean + ); + setupPlacement( + index, + item.key, + Boolean(value) + ); + }} + /> + +
+ ))} + + {/* {[ + { key: "semua", label: "Semua" }, + { key: "nasional", label: "Nasional" }, + { key: "wilayah", label: "Wilayah" }, + { + key: "international", + label: "Internasional", + }, ].map((item, idx) => (
- ))} + ))} */} {/* Detail Wilayah */} - {fileUnitSelections[index]?.wilayah && ( -
-

- Detail Wilayah: -

+ {fileUnitSelections[index]?.wilayah && + !isUploadedBySatkerLevel3 && ( +
+

+ 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) - ); - }} - /> -
-
- )} + )} ) : (