fix: task in mabes and koorkurator
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Sabda Yagra 2026-02-22 22:38:35 +07:00
parent bfd9e694ab
commit 8d2fce74bb
4 changed files with 145 additions and 76 deletions

View File

@ -24,6 +24,7 @@ import CustomPagination from "@/components/table/custom-pagination";
import { close, loading } from "@/config/swal";
import withReactContent from "sweetalert2-react-content";
import Swal from "sweetalert2";
import { getCookiesDecrypt } from "@/lib/utils";
export default function TrackingBeritaCard() {
const [search, setSearch] = useState("");
@ -77,7 +78,7 @@ export default function TrackingBeritaCard() {
const handleSelect = (id: number) => {
setSelectedItems((prev) =>
prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]
prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id],
);
};
@ -86,13 +87,24 @@ export default function TrackingBeritaCard() {
MySwal.fire(
"Peringatan",
"Pilih minimal 1 berita untuk disimpan.",
"warning"
"warning",
);
return;
}
try {
loading();
const levelNumber = Number(getCookiesDecrypt("ulne"));
const levelLimitMap: Record<number, number> = {
1: 5,
2: 2,
3: 2,
};
const maxLimit = levelLimitMap[levelNumber] || 2;
const limitMessage = `Limit media tracking per hari sudah tercapai. Maksimal ${maxLimit} tracking per hari.`;
const promises = selectedItems.map(async (id) => {
const res = await mediaTrackingSave({
@ -101,17 +113,31 @@ export default function TrackingBeritaCard() {
scrapingPeriod: 3,
});
// cek pesan API
if (!res?.data?.success) {
throw new Error(
res?.data?.message ||
"Limit media tracking per hari sudah tercapai. Maksimal 5 tracking per hari."
);
throw new Error(res?.data?.message || limitMessage);
}
return res;
});
// const promises = selectedItems.map(async (id) => {
// const res = await mediaTrackingSave({
// mediaUploadId: id,
// duration: 24,
// scrapingPeriod: 3,
// });
// // cek pesan API
// if (!res?.data?.success) {
// throw new Error(
// res?.data?.message ||
// "Limit media tracking per hari sudah tercapai. Maksimal 5 tracking per hari."
// );
// }
// return res;
// });
await Promise.all(promises);
close();

View File

@ -112,33 +112,21 @@ const useTableColumns = (
enableHiding: false,
cell: ({ row }) => {
const router = useRouter();
const createdById = row.original?.createdBy?.id;
const userId = Number(getCookiesDecrypt("uie"));
const MySwal = withReactContent(Swal);
const roleId = Number(getCookiesDecrypt("urie")) || 0;
const isTabTA = activeTab === "ta";
const isTabMabesKoor = activeTab === "mabes-koor";
// ❗ jika tab = "special"
if (activeTab === "special") {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
size="icon"
className="bg-transparent ring-offset-transparent hover:bg-transparent hover:ring-0 hover:ring-transparent"
>
<MoreVertical className="h-4 w-4 text-default-800" />
</Button>
</DropdownMenuTrigger>
const isCreator = Number(createdById) === Number(userId);
const canView = true;
<DropdownMenuContent className="p-0" align="end">
<Link href={`/contributor/task/detail/${row.original.id}`}>
<DropdownMenuItem className="p-2 text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
<Eye className="w-4 h-4 me-1.5" />
View
</DropdownMenuItem>
</Link>
</DropdownMenuContent>
</DropdownMenu>
);
}
const canEdit = (isTabTA || isTabMabesKoor) && isCreator;
const canDelete = (isTabTA || isTabMabesKoor) && isCreator;
const canUpload = activeTab === "mabes-koor";
async function deleteProcess(id: any) {
loading();
@ -181,39 +169,81 @@ const useTableColumns = (
};
return (
// <DropdownMenu>
// <DropdownMenuTrigger asChild>
// <Button
// size="icon"
// className="bg-transparent ring-offset-transparent hover:bg-transparent hover:ring-0 hover:ring-transparent"
// >
// <span className="sr-only">Open menu</span>
// <MoreVertical className="h-4 w-4 text-default-800" />
// </Button>
// </DropdownMenuTrigger>
// <DropdownMenuContent className="p-0" align="end">
// {/* {(roleId == 11 || roleId == 12 || roleId == 19) && ( */}
// {(roleId == 11 ||
// roleId == 12 ||
// roleId == 19 ||
// roleId == 3) && (
// <Link href={`/contributor/task-ta/detail/${row.original.id}`}>
// <DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
// <Eye className="w-4 h-4 me-1.5" />
// View
// </DropdownMenuItem>
// </Link>
// )}
// {roleId == 11 ||
// (roleId == 3 && (
// <Link href={`/contributor/task-ta/update/${row.original.id}`}>
// <DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
// <SquarePen className="w-4 h-4 me-1.5" />
// Edit
// </DropdownMenuItem>
// </Link>
// ))}
// {(roleId == 12 || roleId == 19) && (
// <Link
// href={`/contributor/task-ta/upload-task/${row.original.id}`}
// >
// <DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
// <Upload className="w-4 h-4 me-1.5" />
// Upload Tugas
// </DropdownMenuItem>
// </Link>
// )}
// {roleId == 11 ||
// (roleId == 3 && (
// <DropdownMenuItem
// onClick={() => TaskDelete(row.original.id)}
// className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"
// >
// <Trash2 className="w-4 h-4 me-1.5" />
// Delete
// </DropdownMenuItem>
// ))}
// </DropdownMenuContent>
// </DropdownMenu>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
size="icon"
className="bg-transparent ring-offset-transparent hover:bg-transparent hover:ring-0 hover:ring-transparent"
>
<span className="sr-only">Open menu</span>
<MoreVertical className="h-4 w-4 text-default-800" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="p-0" align="end">
{/* {(roleId == 11 || roleId == 12 || roleId == 19) && ( */}
{(roleId == 11 ||
roleId == 12 ||
roleId == 19 ||
roleId == 3) && (
<Link href={`/contributor/task-ta/detail/${row.original.id}`}>
<DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
<Eye className="w-4 h-4 me-1.5" />
View
</DropdownMenuItem>
</Link>
)}
{roleId == 11 ||
(roleId == 3 && (
<Link href={`/contributor/task-ta/update/${row.original.id}`}>
<DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
<SquarePen className="w-4 h-4 me-1.5" />
Edit
</DropdownMenuItem>
</Link>
))}
{(roleId == 12 || roleId == 19) && (
<DropdownMenuContent align="end" className="p-0">
{/* VIEW */}
<Link href={`/contributor/task-ta/detail/${row.original.id}`}>
<DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
<Eye className="w-4 h-4 me-1.5" />
View
</DropdownMenuItem>
</Link>
{/* UPLOAD (MABES → KOOR TAB) */}
{activeTab === "mabes-koor" && roleId === 11 && (
<Link
href={`/contributor/task-ta/upload-task/${row.original.id}`}
>
@ -223,16 +253,27 @@ const useTableColumns = (
</DropdownMenuItem>
</Link>
)}
{roleId == 11 ||
(roleId == 3 && (
<DropdownMenuItem
onClick={() => TaskDelete(row.original.id)}
className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"
>
<Trash2 className="w-4 h-4 me-1.5" />
Delete
{/* EDIT (TAB TA & CREATOR ONLY) */}
{canEdit && (
<Link href={`/contributor/task-ta/update/${row.original.id}`}>
<DropdownMenuItem className="p-2 border-b text-default-700 group focus:bg-default focus:text-primary-foreground rounded-none">
<SquarePen className="w-4 h-4 me-1.5" />
Edit
</DropdownMenuItem>
))}
</Link>
)}
{/* DELETE (TAB TA & CREATOR ONLY) */}
{canDelete && (
<DropdownMenuItem
onClick={() => TaskDelete(row.original.id)}
className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"
>
<Trash2 className="w-4 h-4 me-1.5" />
Delete
</DropdownMenuItem>
)}
</DropdownMenuContent>
</DropdownMenu>
);

View File

@ -59,7 +59,7 @@ export default function TaskTaTable() {
const userLevelId = Number(getCookiesDecrypt("ulie"));
const roleId = Number(getCookiesDecrypt("urie"));
const userId = Number(getCookiesDecrypt("uie"));
const isKoorKuratorRole11 = roleId === 11;
const isMabesApprover =
userLevelId === MABES_LEVEL_ID && roleId === APPROVER_ROLE_ID;
@ -92,7 +92,7 @@ export default function TaskTaTable() {
const [totalPage, setTotalPage] = React.useState(1);
// const KOOR_KURATOR_USER_ID = "464";
const KOOR_KURATOR_USER_IDS = ["464", "8258"];
const KOOR_KURATOR_USER_IDS = ["464", "8258", "11", "216"];
// ✅ columns based on tab
const columns = useTableColumns(activeTab);
@ -348,16 +348,18 @@ export default function TaskTaTable() {
Atensi Khusus TA
</button>
<button
onClick={() => setActiveTab("daily")}
className={`px-4 py-1 rounded transition ${
activeTab === "daily"
? "bg-default-900 text-white dark:text-black"
: "border dark:text-default-700"
}`}
>
{t("daily-tasks", { defaultValue: "Daily Tasks" })}
</button>
{!isKoorKuratorRole11 && (
<button
onClick={() => setActiveTab("daily")}
className={`px-4 py-1 rounded transition ${
activeTab === "daily"
? "bg-default-900 text-white dark:text-black"
: "border dark:text-default-700"
}`}
>
{t("daily-tasks", { defaultValue: "Daily Tasks" })}
</button>
)}
</>
)}
</div>

View File

@ -449,7 +449,7 @@ export default function FormTaskTa() {
const requestData = {
...data,
// assignedToUsers: isMabesApprover ? "464" : handleExpertChange(),
assignedToUsers: isMabesApprover ? "464,8258" : handleExpertChange(),
assignedToUsers: isMabesApprover ? "8258" : handleExpertChange(),
assignmentType: taskType,
assignmentTypeId: type,
expertCompetencies: Array.from(selectedCompetencies).join(","),