use crate::application::dtos::responses::MedicationDto;
use crate::presentation::tui::components::item::medication_item;
use crate::presentation::tui::styles::{BORDER_COLOR, content_style};
use ratatui::widgets::{Block, Borders, List, ListItem};
pub fn medication_list<'a>(medications: &'a [MedicationDto]) -> List<'a> {
let items = medications
.iter()
.map(|m| medication_item(&m.name, m.amount_mg))
.collect::<Vec<ListItem<'a>>>();
List::new(items).block(
Block::default()
.borders(Borders::LEFT | Borders::RIGHT)
.border_style(content_style().fg(BORDER_COLOR))
.style(content_style()),
)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::application::dtos::responses::MedicationDto;
#[test]
fn medication_list_constructs_with_items() {
let items = vec![
MedicationDto {
id: "1".into(),
name: "Aspirin".into(),
amount_mg: 500,
scheduled_time: vec![],
dose_frequency: "OnceDaily".to_string(),
taken_today: 0,
scheduled_today: 0,
},
MedicationDto {
id: "2".into(),
name: "Ibuprofen".into(),
amount_mg: 200,
scheduled_time: vec![],
dose_frequency: "OnceDaily".to_string(),
taken_today: 0,
scheduled_today: 0,
},
];
let list = medication_list(&items);
assert!(std::mem::size_of_val(&list) > 0);
}
}