//! Publication list: centre pane showing filtered references. use leptos::prelude::*; use brittle_model::ReferenceSummary; use crate::lib_tab::Pane; /// Centre pane: a scrollable list of publication summaries. /// /// `cursor` tracks which row is selected; clicking a row updates it. /// Items are draggable — dropping onto a library tree node calls /// `add_to_library` via the Tauri IPC. #[component] pub fn PubList( items: RwSignal>, cursor: RwSignal, focused: RwSignal, ) -> impl IntoView { use leptos::either::Either; let open_pdf_ctx = use_context::(); view! {
{move || { let list = items.get(); if list.is_empty() { Either::Left(view! {
"No publications"
}) } else { let cursor_pos = cursor.get(); Either::Right(view! {
    {list.into_iter().enumerate().map(|(i, item)| { let is_cursor = i == cursor_pos; let title = item.title_display().to_owned(); let authors = item.author_display(); let year = item.year.clone().unwrap_or_default(); let kind = item.entry_type.to_string(); let ref_id = item.id.to_string(); let cite_key = item.cite_key.clone(); let ref_id_for_dblclick = ref_id.clone(); view! {
  • {kind} {title} {authors}{" "}{year}
  • } }).collect::>()}
}) } }}
} }