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 { close, loading } from "@/config/swal";
|
||||||
import withReactContent from "sweetalert2-react-content";
|
import withReactContent from "sweetalert2-react-content";
|
||||||
import Swal from "sweetalert2";
|
import Swal from "sweetalert2";
|
||||||
|
import { getCookiesDecrypt } from "@/lib/utils";
|
||||||
|
|
||||||
export default function TrackingBeritaCard() {
|
export default function TrackingBeritaCard() {
|
||||||
const [search, setSearch] = useState("");
|
const [search, setSearch] = useState("");
|
||||||
|
|
@ -77,7 +78,7 @@ export default function TrackingBeritaCard() {
|
||||||
|
|
||||||
const handleSelect = (id: number) => {
|
const handleSelect = (id: number) => {
|
||||||
setSelectedItems((prev) =>
|
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(
|
MySwal.fire(
|
||||||
"Peringatan",
|
"Peringatan",
|
||||||
"Pilih minimal 1 berita untuk disimpan.",
|
"Pilih minimal 1 berita untuk disimpan.",
|
||||||
"warning"
|
"warning",
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
loading();
|
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 promises = selectedItems.map(async (id) => {
|
||||||
const res = await mediaTrackingSave({
|
const res = await mediaTrackingSave({
|
||||||
|
|
@ -101,17 +113,31 @@ export default function TrackingBeritaCard() {
|
||||||
scrapingPeriod: 3,
|
scrapingPeriod: 3,
|
||||||
});
|
});
|
||||||
|
|
||||||
// cek pesan API
|
|
||||||
if (!res?.data?.success) {
|
if (!res?.data?.success) {
|
||||||
throw new Error(
|
throw new Error(res?.data?.message || limitMessage);
|
||||||
res?.data?.message ||
|
|
||||||
"Limit media tracking per hari sudah tercapai. Maksimal 5 tracking per hari."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
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);
|
await Promise.all(promises);
|
||||||
close();
|
close();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -112,33 +112,21 @@ const useTableColumns = (
|
||||||
enableHiding: false,
|
enableHiding: false,
|
||||||
cell: ({ row }) => {
|
cell: ({ row }) => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const createdById = row.original?.createdBy?.id;
|
||||||
|
const userId = Number(getCookiesDecrypt("uie"));
|
||||||
const MySwal = withReactContent(Swal);
|
const MySwal = withReactContent(Swal);
|
||||||
const roleId = Number(getCookiesDecrypt("urie")) || 0;
|
const roleId = Number(getCookiesDecrypt("urie")) || 0;
|
||||||
|
const isTabTA = activeTab === "ta";
|
||||||
|
const isTabMabesKoor = activeTab === "mabes-koor";
|
||||||
|
|
||||||
// ❗ jika tab = "special"
|
const isCreator = Number(createdById) === Number(userId);
|
||||||
if (activeTab === "special") {
|
const canView = true;
|
||||||
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>
|
|
||||||
|
|
||||||
<DropdownMenuContent className="p-0" align="end">
|
const canEdit = (isTabTA || isTabMabesKoor) && isCreator;
|
||||||
<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">
|
const canDelete = (isTabTA || isTabMabesKoor) && isCreator;
|
||||||
<Eye className="w-4 h-4 me-1.5" />
|
|
||||||
View
|
const canUpload = activeTab === "mabes-koor";
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function deleteProcess(id: any) {
|
async function deleteProcess(id: any) {
|
||||||
loading();
|
loading();
|
||||||
|
|
@ -181,39 +169,81 @@ const useTableColumns = (
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
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>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
size="icon"
|
size="icon"
|
||||||
className="bg-transparent ring-offset-transparent hover:bg-transparent hover:ring-0 hover:ring-transparent"
|
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" />
|
<MoreVertical className="h-4 w-4 text-default-800" />
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent className="p-0" align="end">
|
|
||||||
{/* {(roleId == 11 || roleId == 12 || roleId == 19) && ( */}
|
<DropdownMenuContent align="end" className="p-0">
|
||||||
{(roleId == 11 ||
|
{/* VIEW */}
|
||||||
roleId == 12 ||
|
|
||||||
roleId == 19 ||
|
|
||||||
roleId == 3) && (
|
|
||||||
<Link href={`/contributor/task-ta/detail/${row.original.id}`}>
|
<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">
|
<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" />
|
<Eye className="w-4 h-4 me-1.5" />
|
||||||
View
|
View
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
|
||||||
{roleId == 11 ||
|
{/* UPLOAD (MABES → KOOR TAB) */}
|
||||||
(roleId == 3 && (
|
{activeTab === "mabes-koor" && roleId === 11 && (
|
||||||
<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
|
<Link
|
||||||
href={`/contributor/task-ta/upload-task/${row.original.id}`}
|
href={`/contributor/task-ta/upload-task/${row.original.id}`}
|
||||||
>
|
>
|
||||||
|
|
@ -223,8 +253,19 @@ const useTableColumns = (
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
{roleId == 11 ||
|
|
||||||
(roleId == 3 && (
|
{/* 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
|
<DropdownMenuItem
|
||||||
onClick={() => TaskDelete(row.original.id)}
|
onClick={() => TaskDelete(row.original.id)}
|
||||||
className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"
|
className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"
|
||||||
|
|
@ -232,7 +273,7 @@ const useTableColumns = (
|
||||||
<Trash2 className="w-4 h-4 me-1.5" />
|
<Trash2 className="w-4 h-4 me-1.5" />
|
||||||
Delete
|
Delete
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
))}
|
)}
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ export default function TaskTaTable() {
|
||||||
const userLevelId = Number(getCookiesDecrypt("ulie"));
|
const userLevelId = Number(getCookiesDecrypt("ulie"));
|
||||||
const roleId = Number(getCookiesDecrypt("urie"));
|
const roleId = Number(getCookiesDecrypt("urie"));
|
||||||
const userId = Number(getCookiesDecrypt("uie"));
|
const userId = Number(getCookiesDecrypt("uie"));
|
||||||
|
const isKoorKuratorRole11 = roleId === 11;
|
||||||
const isMabesApprover =
|
const isMabesApprover =
|
||||||
userLevelId === MABES_LEVEL_ID && roleId === APPROVER_ROLE_ID;
|
userLevelId === MABES_LEVEL_ID && roleId === APPROVER_ROLE_ID;
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ export default function TaskTaTable() {
|
||||||
const [totalPage, setTotalPage] = React.useState(1);
|
const [totalPage, setTotalPage] = React.useState(1);
|
||||||
|
|
||||||
// const KOOR_KURATOR_USER_ID = "464";
|
// 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
|
// ✅ columns based on tab
|
||||||
const columns = useTableColumns(activeTab);
|
const columns = useTableColumns(activeTab);
|
||||||
|
|
@ -348,6 +348,7 @@ export default function TaskTaTable() {
|
||||||
Atensi Khusus TA
|
Atensi Khusus TA
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
{!isKoorKuratorRole11 && (
|
||||||
<button
|
<button
|
||||||
onClick={() => setActiveTab("daily")}
|
onClick={() => setActiveTab("daily")}
|
||||||
className={`px-4 py-1 rounded transition ${
|
className={`px-4 py-1 rounded transition ${
|
||||||
|
|
@ -358,6 +359,7 @@ export default function TaskTaTable() {
|
||||||
>
|
>
|
||||||
{t("daily-tasks", { defaultValue: "Daily Tasks" })}
|
{t("daily-tasks", { defaultValue: "Daily Tasks" })}
|
||||||
</button>
|
</button>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -449,7 +449,7 @@ export default function FormTaskTa() {
|
||||||
const requestData = {
|
const requestData = {
|
||||||
...data,
|
...data,
|
||||||
// assignedToUsers: isMabesApprover ? "464" : handleExpertChange(),
|
// assignedToUsers: isMabesApprover ? "464" : handleExpertChange(),
|
||||||
assignedToUsers: isMabesApprover ? "464,8258" : handleExpertChange(),
|
assignedToUsers: isMabesApprover ? "8258" : handleExpertChange(),
|
||||||
assignmentType: taskType,
|
assignmentType: taskType,
|
||||||
assignmentTypeId: type,
|
assignmentTypeId: type,
|
||||||
expertCompetencies: Array.from(selectedCompetencies).join(","),
|
expertCompetencies: Array.from(selectedCompetencies).join(","),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue