windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation

use super::traits::Renderable
pub enum ToastVariant {
    Success,
    Error,
    Warning,
    Info,
}

pub enum ToastPosition {
    TopRight,
    TopLeft,
    BottomRight,
    BottomLeft,
    TopCenter,
    BottomCenter,
}

pub struct Toast {
    message: string,
    variant: ToastVariant,
    position: ToastPosition,
    duration: i32,
    show_close: bool,
}

impl Toast {
    pub fn new(message: string) -> Toast {
        Toast {
            message,
            variant: ToastVariant::Info,
            position: ToastPosition::TopRight,
            duration: 3000,
            show_close: true,
        }
    }

    pub fn variant(self, variant: ToastVariant) -> Toast {
        self.variant = variant
        self
    }

    pub fn position(self, position: ToastPosition) -> Toast {
        self.position = position
        self
    }

    pub fn duration(self, duration: i32) -> Toast {
        self.duration = duration
        self
    }

    pub fn show_close(self, show: bool) -> Toast {
        self.show_close = show
        self
    }


}

impl Renderable for Toast {
pub fn render(self) -> string {
        let variant_class = match self.variant {
            ToastVariant::Success => "wj-toast-success",
            ToastVariant::Error => "wj-toast-error",
            ToastVariant::Warning => "wj-toast-warning",
            ToastVariant::Info => "wj-toast-info",
        }

        let position_class = match self.position {
            ToastPosition::TopRight => "wj-toast-top-right",
            ToastPosition::TopLeft => "wj-toast-top-left",
            ToastPosition::BottomRight => "wj-toast-bottom-right",
            ToastPosition::BottomLeft => "wj-toast-bottom-left",
            ToastPosition::TopCenter => "wj-toast-top-center",
            ToastPosition::BottomCenter => "wj-toast-bottom-center",
        }

        let icon = match self.variant {
            ToastVariant::Success => "✓",
            ToastVariant::Error => "✗",
            ToastVariant::Warning => "⚠",
            ToastVariant::Info => "ℹ",
        }

        let close_button = if self.show_close {
            "<button class='wj-toast-close'>×</button>"
        } else {
            ""
        }

        format!("<div class='wj-toast {} {}' data-duration='{}'>
  <span class='wj-toast-icon'>{}</span>
  <span class='wj-toast-message'>{}</span>
  {}
</div>", variant_class, position_class, self.duration, icon, self.message, close_button)
    }
}

fn main() {
    let toast1 = Toast::new("Operation successful!".to_string())
        .variant(ToastVariant::Success)
        .position(ToastPosition::TopRight)

    println!("{}", toast1.render())

    let toast2 = Toast::new("Error occurred".to_string())
        .variant(ToastVariant::Error)
        .duration(5000)

    println!("{}", toast2.render())
}