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

View File

@ -12,6 +12,9 @@ import {
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { format } from "date-fns"; import { format } from "date-fns";
import { Link } from "@/i18n/routing"; 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"); const userLevelId = getCookiesDecrypt("ulie");
@ -168,61 +171,96 @@ const columns: ColumnDef<any>[] = [
); );
}, },
}, },
{ {
id: "actions", id: "actions",
accessorKey: "action", accessorKey: "action",
header: "Actions", header: "Actions",
enableHiding: false, enableHiding: false,
cell: ({ row }) => { cell: ({ row }) => {
// Menentukan segmen path berdasarkan fileTypeId // Menentukan segmen path berdasarkan fileTypeId
let fileTypeSegment; let fileTypeSegment;
switch (row.original.fileTypeId) { switch (row.original.fileTypeId) {
case 1: case 1:
fileTypeSegment = "image"; fileTypeSegment = "image";
break; break;
case 2: case 2:
fileTypeSegment = "video"; fileTypeSegment = "video";
break; break;
case 3: case 3:
fileTypeSegment = "teks"; // Asumsi 'teks' untuk fileTypeId 3 fileTypeSegment = "teks"; // Asumsi 'teks' untuk fileTypeId 3
break; break;
case 4: case 4:
fileTypeSegment = "audio"; // Asumsi 'audio' untuk fileTypeId 4 fileTypeSegment = "audio"; // Asumsi 'audio' untuk fileTypeId 4
break; break;
default: default:
fileTypeSegment = row.original.fileTypeId; // Fallback jika tidak ada yang cocok fileTypeSegment = row.original.fileTypeId; // Fallback jika tidak ada yang cocok
} }
return ( async function doDelete(id: any) {
<DropdownMenu> // loading();
<DropdownMenuTrigger asChild> const data = {
<Button id,
size="icon" };
className="bg-transparent ring-offset-transparent hover:bg-transparent hover:ring-0 hover:ring-transparent"
> const response = await deleteMedia(data);
<span className="sr-only">Buka menu</span>
<MoreVertical className="h-4 w-4 text-default-800" /> if (response?.error) {
</Button> error(response.message);
</DropdownMenuTrigger> return false;
<DropdownMenuContent className="p-0" align="end"> }
{/* Link "View" yang diperbarui dengan logika kondisional untuk fileTypeSegment */} Swal.fire("Berhasil", "Konten telah dihapus.", "success");
<Link window.location.reload();
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"> const handleDeleteMedia = (id: any) => {
<Eye className="w-4 h-4 me-1.5" /> Swal.fire({
Lihat 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> </DropdownMenuItem>
</Link> </DropdownMenuContent>
<DropdownMenuItem className="p-2 border-b text-destructive bg-destructive/30 focus:bg-destructive focus:text-destructive-foreground rounded-none"> </DropdownMenu>
<Trash2 className="w-4 h-4 me-1.5" /> );
Hapus },
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}, },
},
]; ];
export default columns; export default columns;

View File

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