vcard_tui 0.1.2

Terminal UI application for managing vCard contacts.
use ratatui::layout::Rect;
use ratatui::widgets::List;
use ratatui::Frame;
use vcard_parser::constants::PropertyName;
use vcard_parser::vcard::property::property_fn::PropertyFnData;
use vcard_parser::vcard::property::Property::PropertyFn;

use crate::state::StateSelected;
use crate::util::{get_block, get_list_item, property_content};
use crate::State;

pub fn render_contacts(frame: &mut Frame, rect: Rect, state: &mut State) {
    let mut items = Vec::new();

    for (i, vcard) in state.contacts.vcards.iter().enumerate() {
        items.push(get_list_item(
            property_content(
                &vcard
                    .get_property_by_name(PropertyName::FN)
                    .unwrap_or(PropertyFn(PropertyFnData::from("FN:No Name\n"))),
            ),
            state.contacts.list.selected().unwrap_or_default() == i,
        ));
    }

    frame.render_stateful_widget(
        List::new(items).block(get_block(state.selected.is(StateSelected::Contacts), "Contacts")),
        rect,
        &mut state.contacts.list,
    );
}