diff --git a/app/[locale]/(protected)/contributor/agenda-setting/calender-view.tsx b/app/[locale]/(protected)/contributor/agenda-setting/calender-view.tsx index d1e19165..79f068cd 100644 --- a/app/[locale]/(protected)/contributor/agenda-setting/calender-view.tsx +++ b/app/[locale]/(protected)/contributor/agenda-setting/calender-view.tsx @@ -303,7 +303,7 @@ const CalendarView = ({ categories }: CalendarViewProps) => { const firstType = typeSplit[0] as EventType; const colors: Record = { - "0": "bg-black", + "0": "bg-gray-500", "1": "bg-yellow-500", "2": "bg-blue-400", "3": "bg-slate-400", @@ -408,13 +408,13 @@ const CalendarView = ({ categories }: CalendarViewProps) => { const hasMoreEvents = events.length > 3; return ( -
+

{label}

{events.length === 0 ? ( -
+

{t("no-data-yet", { defaultValue: "No Data Yet" })}

diff --git a/app/[locale]/(protected)/contributor/schedule/live-report/component/live-report-table.tsx b/app/[locale]/(protected)/contributor/schedule/live-report/component/live-report-table.tsx index 1e0336bd..55b88f2f 100644 --- a/app/[locale]/(protected)/contributor/schedule/live-report/component/live-report-table.tsx +++ b/app/[locale]/(protected)/contributor/schedule/live-report/component/live-report-table.tsx @@ -226,12 +226,12 @@ const LiveReportTable = () => {
-
+
- - - - - {WRITING_STYLES.map((style) => ( - - {style.label} - - ))} - - -
- -
- - {showRewriteEditor && ( -
- {articleIds.length > 0 && ( -
- {articleIds.map((articleId, index) => ( - - ))} -
- )} - -
- - ( - - )} - /> -
-
- )} -
- - - - {/* - - - - Content Editor - - - - - setSelectedFileType(value) - } - className="grid grid-cols-2 gap-4" - > -
- - -
-
- - -
-
- - {/* Original Content */} - {/* {selectedFileType === "original" && ( -
- + {/* Tampilkan keduanya berdampingan */} +
+ {/* Original Content */} +
+
- )} */} - {/* Content Rewrite */} - {/* {selectedFileType === "rewrite" && ( -
+ {/* Rewrite Content */} +
+ +
@@ -953,7 +863,7 @@ export default function FormConvertSPIT() { onValueChange={setSelectedWritingStyle} > - + {WRITING_STYLES.map((style) => ( @@ -1024,359 +934,367 @@ export default function FormConvertSPIT() {
)}
- )} +
- */} + {/* Media Files */} - {detailThumb.length > 0 && ( - - - - - Media Files - - - -
- - {detailThumb.map((item) => ( - - {item.contentType === "VIDEO" ? ( -
-
-
- {/* main video player */} -
diff --git a/components/form/planning/mediahub-publish.tsx b/components/form/planning/mediahub-publish.tsx index 8d81f7bb..97c1ad56 100644 --- a/components/form/planning/mediahub-publish.tsx +++ b/components/form/planning/mediahub-publish.tsx @@ -87,13 +87,13 @@ export default function PublishMediahub() { const t = useTranslations("Form"); const [mainType, setMainType] = useState(1); const [taskType, setTaskType] = useState("atensi-khusus"); - const [broadcastType, setBroadcastType] = useState("all"); // untuk Tipe Penugasan + const [broadcastType, setBroadcastType] = useState("all"); const [type, setType] = useState("1"); const [selectedTarget, setSelectedTarget] = useState("all"); const [startDate, setStartDate] = useState(new Date()); const [detail, setDetail] = useState(); const [refresh] = useState(false); - const [listDest, setListDest] = useState([]); // Data Polda dan Polres + const [listDest, setListDest] = useState([]); const [checkedLevels, setCheckedLevels] = useState(new Set()); const [expandedPolda, setExpandedPolda] = useState([{}]); const [isLoading, setIsLoading] = useState(false); @@ -267,7 +267,7 @@ export default function PublishMediahub() { }; if (id) { - requestData.id = parseInt(id, 10); // Ensure id is a number + requestData.id = parseInt(id, 10); } console.log("Form Data Submitted:", requestData); @@ -491,7 +491,7 @@ export default function PublishMediahub() { variant="outline" size="md" className={cn( - " justify-between text-left font-normal border-default-200 text-default-600 md:px-4 w-3/12", + " justify-between text-left font-normal border-default-200 text-default-600 md:px-4 w-3/12 dark:border dark:border-gray-500", !startDate && "text-muted-foreground" )} > diff --git a/components/form/task/task-edit-form.tsx b/components/form/task/task-edit-form.tsx index 833ee76f..4d864033 100644 --- a/components/form/task/task-edit-form.tsx +++ b/components/form/task/task-edit-form.tsx @@ -994,7 +994,7 @@ export default function FormTaskEdit() {
@@ -1034,7 +1034,7 @@ export default function FormTaskEdit() {
diff --git a/components/form/task/task-form.tsx b/components/form/task/task-form.tsx index 7a360d0d..1767490b 100644 --- a/components/form/task/task-form.tsx +++ b/components/form/task/task-form.tsx @@ -42,6 +42,7 @@ import { loading } from "@/lib/swal"; import { useTranslations } from "next-intl"; import dynamic from "next/dynamic"; import UpdateSection from "@/app/[locale]/(public)/inbox/update/page"; +import { getCookiesDecrypt } from "@/lib/utils"; const taskSchema = z.object({ title: z.string().min(1, { message: "Judul diperlukan" }), @@ -98,12 +99,11 @@ export default function FormTask() { const MySwal = withReactContent(Swal); const router = useRouter(); const editor = useRef(null); - + const levelNumber = Number(getCookiesDecrypt("ulne")) || 0; type TaskSchema = z.infer; const { id } = useParams() as { id: string }; console.log(id); const [listDest, setListDest] = useState([]); - // State for various form fields const [taskOutput, setTaskOutput] = useState({ all: false, @@ -146,12 +146,14 @@ export default function FormTask() { polres: false, satker: false, }); - + // State untuk melacak apakah perubahan berasal dari checkbox Penerima Tugas - const [isUpdatingFromPenerimaTugas, setIsUpdatingFromPenerimaTugas] = useState(false); + const [isUpdatingFromPenerimaTugas, setIsUpdatingFromPenerimaTugas] = + useState(false); // State untuk melacak jenis perubahan spesifik - const [penerimaTugasChangeType, setPenerimaTugasChangeType] = useState(""); - + const [penerimaTugasChangeType, setPenerimaTugasChangeType] = + useState(""); + const [links, setLinks] = useState([""]); const { register, @@ -201,12 +203,14 @@ export default function FormTask() { setCheckedLevels((prev) => { const updatedLevels = new Set(prev); const isCurrentlyChecked = updatedLevels.has(levelId); - + if (isCurrentlyChecked) { updatedLevels.delete(levelId); - + // Jika ini adalah POLDA yang di-unchecklist, unchecklist juga semua polres di bawahnya - const poldaItem = listDest.find((item: any) => Number(item.id) === levelId); + const poldaItem = listDest.find( + (item: any) => Number(item.id) === levelId + ); if (poldaItem && poldaItem.subDestination) { poldaItem.subDestination.forEach((polres: any) => { updatedLevels.delete(Number(polres.id)); @@ -217,7 +221,7 @@ export default function FormTask() { } return updatedLevels; }); - + // Update unitSelection berdasarkan perubahan di modal updateUnitSelectionFromModal(); }; @@ -233,7 +237,7 @@ export default function FormTask() { // Set flag bahwa perubahan berasal dari checkbox Penerima Tugas setIsUpdatingFromPenerimaTugas(true); setPenerimaTugasChangeType(key + (value ? "_checked" : "_unchecked")); - + if (key === "allUnit") { const newState = { allUnit: value, @@ -247,19 +251,22 @@ export default function FormTask() { // Validasi khusus untuk POLRES if (key === "polres" && value) { // Cek apakah ada POLDA yang sudah dichecklist di modal - const hasCheckedPolda = listDest.some((item: any) => - item.levelNumber === 2 && - item.name !== "SATKER POLRI" && - checkedLevels.has(Number(item.id)) + const hasCheckedPolda = listDest.some( + (item: any) => + item.levelNumber === 2 && + item.name !== "SATKER POLRI" && + checkedLevels.has(Number(item.id)) ); - + if (!hasCheckedPolda) { // Jika tidak ada POLDA yang dichecklist di modal, tampilkan peringatan dan batalkan - alert("Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES."); + alert( + "Harap pilih POLDA di Modal terlebih dahulu sebelum mengaktifkan checkbox POLRES." + ); return; // Batalkan perubahan } } - + const updatedSelection = { ...unitSelection, [key]: value, @@ -396,52 +403,67 @@ export default function FormTask() { const updateUnitSelectionFromModal = () => { setTimeout(() => { // Hitung total item yang tersedia untuk setiap kategori - const totalPolda = listDest.filter((item: any) => - item.levelNumber === 2 && item.name !== "SATKER POLRI" + const totalPolda = listDest.filter( + (item: any) => item.levelNumber === 2 && item.name !== "SATKER POLRI" ).length; - + const totalPolres = listDest.reduce((total: number, item: any) => { if (item.subDestination) { return total + item.subDestination.length; } return total; }, 0); - - const satkerItem = listDest.find((item: any) => item.name === "SATKER POLRI"); - const totalSatker = satkerItem ? (1 + (satkerItem.subDestination?.length || 0)) : 0; - + + const satkerItem = listDest.find( + (item: any) => item.name === "SATKER POLRI" + ); + const totalSatker = satkerItem + ? 1 + (satkerItem.subDestination?.length || 0) + : 0; + // Hitung item yang dichecklist untuk setiap kategori - const checkedPoldaCount = listDest.filter((item: any) => - item.levelNumber === 2 && - item.name !== "SATKER POLRI" && - checkedLevels.has(Number(item.id)) + const checkedPoldaCount = listDest.filter( + (item: any) => + item.levelNumber === 2 && + item.name !== "SATKER POLRI" && + checkedLevels.has(Number(item.id)) ).length; - + const checkedPolresCount = listDest.reduce((total: number, item: any) => { if (item.subDestination) { - return total + item.subDestination.filter((sub: any) => checkedLevels.has(Number(sub.id))).length; + return ( + total + + item.subDestination.filter((sub: any) => + checkedLevels.has(Number(sub.id)) + ).length + ); } return total; }, 0); - - const checkedSatkerCount = satkerItem ? ( - (checkedLevels.has(Number(satkerItem.id)) ? 1 : 0) + - (satkerItem.subDestination?.filter((sub: any) => checkedLevels.has(Number(sub.id))).length || 0) - ) : 0; - + + const checkedSatkerCount = satkerItem + ? (checkedLevels.has(Number(satkerItem.id)) ? 1 : 0) + + (satkerItem.subDestination?.filter((sub: any) => + checkedLevels.has(Number(sub.id)) + ).length || 0) + : 0; + // Checkbox hanya aktif jika SEMUA item dalam kategori tersebut dichecklist - const hasCheckedPolda = totalPolda > 0 && checkedPoldaCount === totalPolda; - const hasCheckedPolres = totalPolres > 0 && checkedPolresCount === totalPolres; - const hasCheckedSatker = totalSatker > 0 && checkedSatkerCount === totalSatker; - + const hasCheckedPolda = + totalPolda > 0 && checkedPoldaCount === totalPolda; + const hasCheckedPolres = + totalPolres > 0 && checkedPolresCount === totalPolres; + const hasCheckedSatker = + totalSatker > 0 && checkedSatkerCount === totalSatker; + // Update unitSelection berdasarkan checkbox yang aktif di modal - setUnitSelection(prev => ({ + setUnitSelection((prev) => ({ ...prev, polda: hasCheckedPolda, polres: hasCheckedPolres, satker: hasCheckedSatker, // allUnit hanya true jika semua kategori terpenuhi - allUnit: hasCheckedPolda && hasCheckedPolres && hasCheckedSatker + allUnit: hasCheckedPolda && hasCheckedPolres && hasCheckedSatker, })); }, 0); }; @@ -453,29 +475,41 @@ export default function FormTask() { // Khusus untuk unchecklist POLRES: hanya unchecklist polres, pertahankan polda if (penerimaTugasChangeType === "polres_unchecked") { const newCheckedLevels = new Set(checkedLevels); - + // Hapus semua polres dari modal, tapi pertahankan polda listDest.forEach((item: any) => { - if (item.subDestination && item.levelNumber === 2 && item.name !== "SATKER POLRI") { + if ( + item.subDestination && + item.levelNumber === 2 && + item.name !== "SATKER POLRI" + ) { item.subDestination.forEach((polres: any) => { newCheckedLevels.delete(Number(polres.id)); }); } }); - + setCheckedLevels(newCheckedLevels); } // Untuk perubahan lainnya, jalankan logika normal - else if (unitSelection.polda || unitSelection.polres || unitSelection.satker) { + else if ( + unitSelection.polda || + unitSelection.polres || + unitSelection.satker + ) { // Mulai dengan checkbox yang sudah ada untuk mempertahankan pilihan manual user const newCheckedLevels = new Set(checkedLevels); - + listDest.forEach((item: any) => { // Jika polda dichecklist, checklist semua polda (levelNumber 2, bukan SATKER POLRI) - if (unitSelection.polda && item.levelNumber === 2 && item.name !== "SATKER POLRI") { + if ( + unitSelection.polda && + item.levelNumber === 2 && + item.name !== "SATKER POLRI" + ) { newCheckedLevels.add(Number(item.id)); } - + // Jika satker dichecklist, checklist SATKER POLRI dan sub-itemnya if (unitSelection.satker && item.name === "SATKER POLRI") { newCheckedLevels.add(Number(item.id)); @@ -485,17 +519,25 @@ export default function FormTask() { }); } } - + // Jika polres dichecklist if (unitSelection.polres && item.subDestination) { // Jika checkbox POLDA di Penerima Tugas juga aktif, checklist semua polres - if (unitSelection.polda && item.levelNumber === 2 && item.name !== "SATKER POLRI") { + if ( + unitSelection.polda && + item.levelNumber === 2 && + item.name !== "SATKER POLRI" + ) { item.subDestination.forEach((polres: any) => { newCheckedLevels.add(Number(polres.id)); }); } // Jika checkbox POLDA di Penerima Tugas tidak aktif, tapi ada POLDA yang dichecklist di modal - else if (!unitSelection.polda && item.levelNumber === 2 && item.name !== "SATKER POLRI") { + else if ( + !unitSelection.polda && + item.levelNumber === 2 && + item.name !== "SATKER POLRI" + ) { // Cek apakah POLDA ini sudah dichecklist di modal if (checkedLevels.has(Number(item.id))) { // Jika ya, checklist semua polres dari POLDA ini @@ -506,13 +548,13 @@ export default function FormTask() { } } }); - + setCheckedLevels(newCheckedLevels); } else { // Jika tidak ada unitSelection yang aktif, unchecklist semua item di modal setCheckedLevels(new Set()); } - + // Reset flag setelah sinkronisasi selesai setTimeout(() => { setIsUpdatingFromPenerimaTugas(false); @@ -756,7 +798,7 @@ export default function FormTask() {
- {Object.keys(unitSelection).map((key) => { + {/* {Object.keys(unitSelection).map((key) => { return (
); - })} + })} */} + {Object.keys(unitSelection) + .filter((key) => { + if (levelNumber === 2) { + return key === "polda" || key === "polres"; + } + return true; + }) + .map((key) => { + return ( +
+ + handleUnitChange( + key as keyof typeof unitSelection, + value as boolean + ) + } + /> + +
+ ); + })}
@@ -790,77 +862,83 @@ export default function FormTask() { Daftar Wilayah Polda dan Polres
- {listDest.map((polda: any) => ( -
- - {expandedPolda[polda.id] && ( -
-
+ )} +
+ ))}