This commit is contained in:
Sabda Yagra 2025-06-25 21:05:02 +07:00
parent 82a4233fb1
commit fbd5586ae6
3 changed files with 104 additions and 66 deletions

View File

@ -164,8 +164,8 @@ const TableImage = () => {
setSelectedCategories(
(prev: any) =>
prev.includes(categoryId)
? prev.filter((id: any) => id !== categoryId) // Hapus jika sudah dipilih
: [...prev, categoryId] // Tambahkan jika belum dipilih
? prev.filter((id: any) => id !== categoryId)
: [...prev, categoryId]
);
// Perbarui filter kategori
@ -199,8 +199,8 @@ const TableImage = () => {
statusFilter?.sort().join(",").includes("1") ? userLevelId : "",
filterByCreator,
filterBySource,
formattedStartDate, // Pastikan format sesuai
formattedEndDate, // Pastikan format sesuai
formattedStartDate,
formattedEndDate,
search,
filterByCreatorGroup,
locale == "en"
@ -221,16 +221,16 @@ const TableImage = () => {
}
const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {
setSearch(e.target.value); // Perbarui state search
table.getColumn("judul")?.setFilterValue(e.target.value); // Set filter tabel
setSearch(e.target.value);
table.getColumn("judul")?.setFilterValue(e.target.value);
};
const handleSearchFilterBySource = (
e: React.ChangeEvent<HTMLInputElement>
) => {
const value = e.target.value;
setFilterBySource(value); // Perbarui state filter
fetchData(); // Panggil ulang data dengan filter baru
setFilterBySource(value);
fetchData();
};
function handleStatusCheckboxChange(value: any) {
@ -245,8 +245,8 @@ const TableImage = () => {
e: React.ChangeEvent<HTMLInputElement>
) => {
const value = e.target.value;
setFilterByCreator(value); // Perbarui state filter
fetchData(); // Panggil ulang data dengan filter baru
setFilterByCreator(value);
fetchData();
};
return (

View File

@ -12,6 +12,9 @@ import {
import { Button } from "@/components/ui/button";
import { format } from "date-fns";
import { Link } from "@/i18n/routing";
import Swal from "sweetalert2";
import { deleteMedia } from "@/service/content/content";
import { error, success } from "@/config/swal";
const userLevelId = getCookiesDecrypt("ulie");
@ -168,61 +171,96 @@ const columns: ColumnDef<any>[] = [
);
},
},
{
id: "actions",
accessorKey: "action",
header: "Actions",
enableHiding: false,
cell: ({ row }) => {
// Menentukan segmen path berdasarkan fileTypeId
let fileTypeSegment;
switch (row.original.fileTypeId) {
case 1:
fileTypeSegment = "image";
break;
case 2:
fileTypeSegment = "video";
break;
case 3:
fileTypeSegment = "teks"; // Asumsi 'teks' untuk fileTypeId 3
break;
case 4:
fileTypeSegment = "audio"; // Asumsi 'audio' untuk fileTypeId 4
break;
default:
fileTypeSegment = row.original.fileTypeId; // Fallback jika tidak ada yang cocok
}
{
id: "actions",
accessorKey: "action",
header: "Actions",
enableHiding: false,
cell: ({ row }) => {
// Menentukan segmen path berdasarkan fileTypeId
let fileTypeSegment;
switch (row.original.fileTypeId) {
case 1:
fileTypeSegment = "image";
break;
case 2:
fileTypeSegment = "video";
break;
case 3:
fileTypeSegment = "teks"; // Asumsi 'teks' untuk fileTypeId 3
break;
case 4:
fileTypeSegment = "audio"; // Asumsi 'audio' untuk fileTypeId 4
break;
default:
fileTypeSegment = row.original.fileTypeId; // Fallback jika tidak ada yang cocok
}
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">Buka menu</span>
<MoreVertical className="h-4 w-4 text-default-800" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="p-0" align="end">
{/* Link "View" yang diperbarui dengan logika kondisional untuk fileTypeSegment */}
<Link
href={`/contributor/content/${fileTypeSegment}/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" />
Lihat
async function doDelete(id: any) {
// loading();
const data = {
id,
};
const response = await deleteMedia(data);
if (response?.error) {
error(response.message);
return false;
}
Swal.fire("Berhasil", "Konten telah dihapus.", "success");
window.location.reload();
}
const handleDeleteMedia = (id: any) => {
Swal.fire({
title: "Hapus Data",
text: "",
icon: "warning",
showCancelButton: true,
cancelButtonColor: "#3085d6",
confirmButtonColor: "#d33",
confirmButtonText: "Hapus",
}).then((result) => {
if (result.isConfirmed) {
doDelete(id);
}
});
};
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">Buka menu</span>
<MoreVertical className="h-4 w-4 text-default-800" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="p-0" align="end">
{/* Link "View" yang diperbarui dengan logika kondisional untuk fileTypeSegment */}
<Link
href={`/contributor/content/${fileTypeSegment}/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" />
Lihat
</DropdownMenuItem>
</Link>
<DropdownMenuItem
onClick={() => handleDeleteMedia(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" />
Hapus
</DropdownMenuItem>
</Link>
<DropdownMenuItem 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" />
Hapus
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
</DropdownMenuContent>
</DropdownMenu>
);
},
},
},
];
export default columns;

View File

@ -165,8 +165,8 @@ const ContentTable = () => {
}
const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {
setSearch(e.target.value); // Perbarui state search
table.getColumn("judul")?.setFilterValue(e.target.value); // Set filter tabel
setSearch(e.target.value);
table.getColumn("judul")?.setFilterValue(e.target.value);
};
return (
@ -216,8 +216,8 @@ const ContentTable = () => {
<SelectContent>
<SelectGroup>
<SelectLabel>Filter</SelectLabel>
<SelectItem value="1">Image</SelectItem>
<SelectItem value="2">Video</SelectItem>
<SelectItem value="1">Foto</SelectItem>
<SelectItem value="2">Audio Visual</SelectItem>
<SelectItem value="3">Teks</SelectItem>
<SelectItem value="4">Audio</SelectItem>
</SelectGroup>