shellql 0.1.7-beta

A Vim- and tmux-inspired terminal database manager for developers
Documentation
use crate::tui::{AppState, SearchDirection, state::pane_layout::PaneType};

pub fn next(state: &mut AppState) {
    let active_idx = state.active_tab;
    let Some(tab) = state.tabs.get_mut(active_idx) else {
        return;
    };
    if let Some(pane) = tab.tree.active_mut() {
        if let Some(ref mut search) = pane.last_search {
            if !search.matches.is_empty() {
                match search.direction {
                    SearchDirection::Forward => {
                        search.current_idx = (search.current_idx + 1) % search.matches.len();
                    }
                    SearchDirection::Backward => {
                        search.current_idx =
                            (search.current_idx + search.matches.len() - 1) % search.matches.len();
                    }
                }
                match pane.kind {
                    PaneType::TableList | PaneType::SchemaPicker => {
                        pane.nav_cursor = search.matches[search.current_idx]
                    }
                    PaneType::TableView | PaneType::QueryResults => {
                        pane.row_cursor = search.matches[search.current_idx]
                    }
                    _ => {}
                }
            }
        }
    }
}

pub fn prev(state: &mut AppState) {
    let active_idx = state.active_tab;
    let Some(tab) = state.tabs.get_mut(active_idx) else {
        return;
    };
    if let Some(pane) = tab.tree.active_mut() {
        if let Some(ref mut search) = pane.last_search {
            if !search.matches.is_empty() {
                match search.direction {
                    SearchDirection::Forward => {
                        search.current_idx =
                            (search.current_idx + search.matches.len() - 1) % search.matches.len();
                    }
                    SearchDirection::Backward => {
                        search.current_idx = (search.current_idx + 1) % search.matches.len();
                    }
                }
                match pane.kind {
                    PaneType::TableList | PaneType::SchemaPicker => {
                        pane.nav_cursor = search.matches[search.current_idx]
                    }
                    PaneType::TableView | PaneType::QueryResults => {
                        pane.row_cursor = search.matches[search.current_idx]
                    }
                    _ => {}
                }
            }
        }
    }
}