+
+
+ {t("EVENTS.PLAYLISTS.DETAILS.TABS.ENTRIES")}
+ {entries.length > 0 && (
+
+ {" "}({entries.length})
+
+ )}
+
+
+
+ {entries.length === 0 ? (
+
+ {t("EVENTS.PLAYLISTS.DETAILS.ENTRIES.EMPTY")}
+
+ ) : (
+
+
+
+ {provided => (
+
+ {entries.map((entry, index) => (
+
+ {provided => (
+
+ )}
+
+ ))}
+ {provided.placeholder}
+
+ )}
+
+
+
+ )}
+
+ >;
+};
+
+export default PlaylistEntriesEditor;
diff --git a/src/components/events/partials/PlaylistActionsCell.tsx b/src/components/events/partials/PlaylistActionsCell.tsx
new file mode 100644
index 0000000000..539ba465e8
--- /dev/null
+++ b/src/components/events/partials/PlaylistActionsCell.tsx
@@ -0,0 +1,48 @@
+import { LuFileText } from "react-icons/lu";
+
+import { fetchPlaylistDetails, openModal } from "../../../slices/playlistDetailsSlice";
+import { useAppDispatch } from "../../../store";
+import { deletePlaylist, Playlist } from "../../../slices/playlistSlice";
+import ButtonLikeAnchor from "../../shared/ButtonLikeAnchor";
+import { PlaylistDetailsPage } from "./modals/PlaylistDetails";
+import { ActionCellDelete } from "../../shared/ActionCellDelete";
+
+
+/**
+ * This component renders the action cells of playlists in the table view
+ */
+const PlaylistActionsCell = ({
+ row,
+}: {
+ row: Playlist
+}) => {
+ const dispatch = useAppDispatch();
+
+ const showPlaylistDetailsModal = async () => {
+ await dispatch(fetchPlaylistDetails(row.id));
+
+ dispatch(openModal(PlaylistDetailsPage.Metadata, { id: row.id, title: row.title }));
+ };
+
+ return <>
+ {/* playlist details */}
+