quinjet 0.0.50

A fast, live, keyboard-first Git source-control interface for the terminal
#[cfg_attr(not(test), expect(clippy::wildcard_imports, reason = "shared"))]
use super::*;

pub(super) fn draw_conflict(
    frame: &mut Frame<'_>,
    hits: &mut Vec<(Rect, ModalAction)>,
    change: &Change,
    theme: &Theme,
) {
    let area = centered_rect(
        frame.area().width.saturating_sub(14).min(72),
        10,
        frame.area(),
    );
    frame.render_widget(Clear, area);
    let block = modal_block(" Resolve Merge Conflict ", theme);
    let inner = block.inner(area);
    frame.render_widget(block, area);
    frame.render_widget(
        Paragraph::new(vec![
            Line::from(vec![
                file_icon_span(&change.path, theme),
                Span::raw(" "),
                Span::styled(
                    change.display_path(),
                    Style::default().fg(theme.text).add_modifier(Modifier::BOLD),
                ),
            ]),
            Line::from(""),
            Line::from(vec![
                Span::styled(
                    "o",
                    Style::default()
                        .fg(theme.accent)
                        .add_modifier(Modifier::BOLD),
                ),
                Span::raw(" accept ours     "),
                Span::styled(
                    "t",
                    Style::default()
                        .fg(theme.accent)
                        .add_modifier(Modifier::BOLD),
                ),
                Span::raw(" accept theirs     "),
                Span::styled(
                    "s",
                    Style::default()
                        .fg(theme.accent)
                        .add_modifier(Modifier::BOLD),
                ),
                Span::raw(" mark resolved"),
            ]),
        ]),
        Rect::new(
            inner.x,
            inner.y + 1,
            inner.width,
            inner.height.saturating_sub(2),
        ),
    );
    let actions_y = inner.y.saturating_add(3);
    let ours = Rect::new(inner.x, actions_y, 18.min(inner.width), 1);
    let theirs = Rect::new(
        ours.right(),
        actions_y,
        20.min(inner.right().saturating_sub(ours.right())),
        1,
    );
    let resolved = Rect::new(
        theirs.right(),
        actions_y,
        inner.right().saturating_sub(theirs.right()),
        1,
    );
    hits.push((ours, ModalAction::ConflictOurs));
    hits.push((theirs, ModalAction::ConflictTheirs));
    hits.push((resolved, ModalAction::ConflictResolved));
    draw_modal_hint(frame, area, "Esc cancel", theme);
}