mirror of
https://github.com/yattee/yattee.git
synced 2026-02-20 01:39:46 +00:00
Yattee v2 rewrite
This commit is contained in:
64
Yattee/Views/Playlist/PlaylistVideoRowView.swift
Normal file
64
Yattee/Views/Playlist/PlaylistVideoRowView.swift
Normal file
@@ -0,0 +1,64 @@
|
||||
//
|
||||
// PlaylistVideoRowView.swift
|
||||
// Yattee
|
||||
//
|
||||
// Unified row view for playlist videos (both remote and local playlists).
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
/// Unified row view for displaying videos in playlists.
|
||||
/// Used by UnifiedPlaylistDetailView for both remote and local playlists.
|
||||
/// Uses VideoRowView for consistent presentation with automatic DeArrow integration.
|
||||
struct PlaylistVideoRowView: View {
|
||||
let index: Int
|
||||
let video: Video
|
||||
var onRemove: (() -> Void)? = nil
|
||||
|
||||
var body: some View {
|
||||
VideoRowView(
|
||||
video: video,
|
||||
style: .regular,
|
||||
index: index
|
||||
)
|
||||
.videoContextMenu(
|
||||
video: video,
|
||||
customActions: onRemove.map { removeAction in
|
||||
[VideoContextAction(
|
||||
String(localized: "playlist.removeVideo"),
|
||||
systemImage: "trash",
|
||||
role: .destructive,
|
||||
action: removeAction
|
||||
)]
|
||||
} ?? [],
|
||||
context: .playlist
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Convenience Initializers
|
||||
|
||||
extension PlaylistVideoRowView {
|
||||
/// Initialize from a LocalPlaylistItem model.
|
||||
init(item: LocalPlaylistItem, index: Int, onRemove: @escaping () -> Void) {
|
||||
self.index = index
|
||||
self.video = item.toVideo()
|
||||
self.onRemove = onRemove
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Preview
|
||||
|
||||
#Preview {
|
||||
List {
|
||||
PlaylistVideoRowView(
|
||||
index: 1,
|
||||
video: .preview
|
||||
)
|
||||
PlaylistVideoRowView(
|
||||
index: 2,
|
||||
video: .preview,
|
||||
onRemove: {}
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user