byewlma/components/
progress.rs1use crate::{innerlude::*, SemanticColor, Size};
2
3pub type Progress = Pure<PureProgress>;
5
6#[derive(Debug, Default, PartialEq, Clone, Properties)]
7pub struct PureProgress {
8 #[prop_or_default]
9 pub id: Option<Cow<'static, str>>,
10
11 #[prop_or_default]
12 pub class: Classes,
13
14 #[prop_or_default]
15 pub style: Option<Cow<'static, str>>,
16
17 pub state: ProgressState,
18
19 #[prop_or_default]
20 pub size: Option<Size>,
21
22 #[prop_or_default]
23 pub color: Option<SemanticColor>,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq)]
27pub enum ProgressState {
28 Indeterminate,
29 Value { value: usize, max: usize },
30}
31
32impl Default for ProgressState {
33 fn default() -> Self {
34 Self::Indeterminate
35 }
36}
37
38impl PureComponent for PureProgress {
39 fn render(&self) -> Html {
40 let mut class = self.class.clone();
41 unsafe {
42 class.unchecked_push("progress");
43 }
44
45 if let Some(size) = &self.size {
46 class.add(size);
47 }
48
49 if let Some(color) = &self.color {
50 class.add(color);
51 }
52
53 match self.state {
54 ProgressState::Indeterminate => html! {
55 <progress
56 id={self.id.clone()}
57 class={class}
58 style={self.style.clone()}
59 />
60 },
61
62 ProgressState::Value { value, max } => html! {
63 <progress
64 id={self.id.clone()}
65 class={class}
66 style={self.style.clone()}
67 value={value.to_string()}
68 max={max.to_string()}
69 >
70 </progress>
72 },
73 }
74 }
75}