fix: task in mabes and koorkurator
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
bfd9e694ab
commit
8d2fce74bb
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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(","),
|
||||
|
|
|
|||
Loading…
Reference in New Issue