atac 0.23.0

Arguably a Terminal API Client. Feature-full, free, open-source, offline and account-less.
use ratatui::layout::Direction::Vertical;
use ratatui::layout::{Alignment, Constraint, Layout, Rect};
use ratatui::prelude::Stylize;
use ratatui::widgets::{Block, Borders};
use ratatui::Frame;

use crate::app::app::App;
use crate::app::files::theme::THEME;
use crate::tui::app_states::AppState::{EditingPostRequestScript, EditingPreRequestScript};
use crate::tui::utils::stateful::text_input::MultiLineTextInput;
use crate::tui::utils::syntax_highlighting::JS_SYNTAX_REF;

impl App<'_> {
    pub(super) fn render_request_script(&mut self, frame: &mut Frame, area: Rect) {
        let scripts_layout = Layout::new(
            Vertical,
            vec![
                Constraint::Percentage(50),
                Constraint::Length(1),
                Constraint::Percentage(50)
            ]
        )
            .split(area);

        let mut highlight_pre_request_script = false;
        let display_pre_request_script_cursor = matches!(&self.state, EditingPreRequestScript);
        let mut highlight_post_request_script = false;
        let display_post_request_script_cursor = matches!(&self.state, EditingPostRequestScript);

        let title = match self.script_console.script_selection {
            0 => {
                highlight_pre_request_script = true;

                " ↑ Pre-request "
            },
            1 => {
                highlight_post_request_script = true;

                " Post-request ↓ "
            },
            _ => ""
        };

        let inter_script_block = Block::default()
            .borders(Borders::BOTTOM)
            .title_bottom(title)
            .title_alignment(Alignment::Center)
            .fg(THEME.read().ui.main_foreground_color);

        self.script_console.pre_request_text_area.highlight_text = highlight_pre_request_script;
        self.script_console.pre_request_text_area.display_cursor = display_pre_request_script_cursor;
        self.script_console.post_request_text_area.highlight_text = highlight_post_request_script;
        self.script_console.post_request_text_area.display_cursor = display_post_request_script_cursor;
        
        frame.render_widget(MultiLineTextInput(&mut self.script_console.pre_request_text_area, JS_SYNTAX_REF.clone()), scripts_layout[0]);
        frame.render_widget(inter_script_block, scripts_layout[1]);
        frame.render_widget(MultiLineTextInput(&mut self.script_console.post_request_text_area, JS_SYNTAX_REF.clone()), scripts_layout[2]);
    }
}