Rewrite some components render
This commit is contained in:
parent
a5594f6844
commit
682066b561
@ -14,6 +14,55 @@ pub struct StyledAvatar<'l> {
|
|||||||
pub user_index: usize,
|
pub user_index: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'l> StyledAvatar<'l> {
|
||||||
|
pub fn render(self) -> Node<Msg> {
|
||||||
|
let StyledAvatar {
|
||||||
|
avatar_url,
|
||||||
|
size,
|
||||||
|
name,
|
||||||
|
on_click,
|
||||||
|
class_list,
|
||||||
|
user_index,
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
let index = user_index % 8;
|
||||||
|
|
||||||
|
let shared_style = format!("width: {size}px; height: {size}px", size = size);
|
||||||
|
let letter = name
|
||||||
|
.chars()
|
||||||
|
.rev()
|
||||||
|
.last()
|
||||||
|
.map(|c| c.to_string())
|
||||||
|
.unwrap_or_default();
|
||||||
|
match avatar_url {
|
||||||
|
Some(url) => {
|
||||||
|
let style = format!(
|
||||||
|
"{shared}; background-image: url({url});",
|
||||||
|
shared = shared_style,
|
||||||
|
url = url
|
||||||
|
);
|
||||||
|
div![
|
||||||
|
C!["styledAvatar image", class_list],
|
||||||
|
attrs![At::Style => style, At::Title => name],
|
||||||
|
on_click
|
||||||
|
]
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
div![
|
||||||
|
C!["styledAvatar letter", class_list],
|
||||||
|
attrs![
|
||||||
|
At::Class => format!("avatarColor{}", index + 1),
|
||||||
|
At::Style => shared_style,
|
||||||
|
At::Title => name
|
||||||
|
],
|
||||||
|
span![letter],
|
||||||
|
on_click,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'l> Default for StyledAvatar<'l> {
|
impl<'l> Default for StyledAvatar<'l> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -30,53 +79,6 @@ impl<'l> Default for StyledAvatar<'l> {
|
|||||||
impl<'l> ToNode for StyledAvatar<'l> {
|
impl<'l> ToNode for StyledAvatar<'l> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn into_node(self) -> Node<Msg> {
|
fn into_node(self) -> Node<Msg> {
|
||||||
render(self)
|
self.render()
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn render(values: StyledAvatar) -> Node<Msg> {
|
|
||||||
let StyledAvatar {
|
|
||||||
avatar_url,
|
|
||||||
size,
|
|
||||||
name,
|
|
||||||
on_click,
|
|
||||||
class_list,
|
|
||||||
user_index,
|
|
||||||
} = values;
|
|
||||||
|
|
||||||
let index = user_index % 8;
|
|
||||||
|
|
||||||
let shared_style = format!("width: {size}px; height: {size}px", size = size);
|
|
||||||
let letter = name
|
|
||||||
.chars()
|
|
||||||
.rev()
|
|
||||||
.last()
|
|
||||||
.map(|c| c.to_string())
|
|
||||||
.unwrap_or_default();
|
|
||||||
match avatar_url {
|
|
||||||
Some(url) => {
|
|
||||||
let style = format!(
|
|
||||||
"{shared}; background-image: url({url});",
|
|
||||||
shared = shared_style,
|
|
||||||
url = url
|
|
||||||
);
|
|
||||||
div![
|
|
||||||
C!["styledAvatar image", class_list],
|
|
||||||
attrs![At::Style => style, At::Title => name],
|
|
||||||
on_click
|
|
||||||
]
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
div![
|
|
||||||
C!["styledAvatar letter", class_list],
|
|
||||||
attrs![
|
|
||||||
At::Class => format!("avatarColor{}", index + 1),
|
|
||||||
At::Style => shared_style,
|
|
||||||
At::Title => name
|
|
||||||
],
|
|
||||||
span![letter],
|
|
||||||
on_click,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,59 +81,57 @@ impl<'l> Default for StyledButton<'l> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'l> ToNode for StyledButton<'l> {
|
impl<'l> StyledButton<'l> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn into_node(self) -> Node<Msg> {
|
pub fn render(self) -> Node<Msg> {
|
||||||
render(self)
|
let StyledButton {
|
||||||
|
text,
|
||||||
|
variant,
|
||||||
|
disabled,
|
||||||
|
active,
|
||||||
|
icon,
|
||||||
|
on_click,
|
||||||
|
children,
|
||||||
|
class_list,
|
||||||
|
button_type,
|
||||||
|
button_id,
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
let handler = match on_click {
|
||||||
|
Some(h) if !disabled => vec![h],
|
||||||
|
_ => vec![],
|
||||||
|
};
|
||||||
|
|
||||||
|
let children_len = children.len();
|
||||||
|
let content = if children.is_empty() && text.is_none() {
|
||||||
|
Node::Empty
|
||||||
|
} else {
|
||||||
|
span![C!["text"], text.unwrap_or_default(), children]
|
||||||
|
};
|
||||||
|
|
||||||
|
let button_id = button_id.map(|id| id.to_str()).unwrap_or_default();
|
||||||
|
|
||||||
|
seed::button![
|
||||||
|
C![
|
||||||
|
"styledButton",
|
||||||
|
class_list,
|
||||||
|
variant.to_str(),
|
||||||
|
IF![children_len > 0 && text.is_none() => "iconOnly"],
|
||||||
|
IF![active => "isActive"],
|
||||||
|
IF![icon.is_some() => "withIcon"],
|
||||||
|
],
|
||||||
|
attrs![At::Id => button_id, At::Type => button_type],
|
||||||
|
IF![disabled => attrs![At::Disabled => true]],
|
||||||
|
handler,
|
||||||
|
icon.unwrap_or(Node::Empty),
|
||||||
|
content,
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
impl<'l> ToNode for StyledButton<'l> {
|
||||||
pub fn render(values: StyledButton) -> Node<Msg> {
|
#[inline(always)]
|
||||||
let StyledButton {
|
fn into_node(self) -> Node<Msg> {
|
||||||
text,
|
self.render()
|
||||||
variant,
|
}
|
||||||
disabled,
|
|
||||||
active,
|
|
||||||
icon,
|
|
||||||
on_click,
|
|
||||||
children,
|
|
||||||
class_list,
|
|
||||||
button_type,
|
|
||||||
button_id,
|
|
||||||
} = values;
|
|
||||||
let class_list = format!(
|
|
||||||
"{} {} {} {} {}",
|
|
||||||
class_list,
|
|
||||||
variant,
|
|
||||||
if children.is_empty() && text.is_none() {
|
|
||||||
"iconOnly"
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
},
|
|
||||||
if active { "isActive" } else { "" },
|
|
||||||
if icon.is_some() { "withIcon" } else { "" }
|
|
||||||
);
|
|
||||||
let handler = match on_click {
|
|
||||||
Some(h) if !disabled => vec![h],
|
|
||||||
_ => vec![],
|
|
||||||
};
|
|
||||||
|
|
||||||
let icon_node = icon.unwrap_or(Node::Empty);
|
|
||||||
let content = if children.is_empty() && text.is_none() {
|
|
||||||
Node::Empty
|
|
||||||
} else {
|
|
||||||
span![C!["text"], text.unwrap_or_default(), children]
|
|
||||||
};
|
|
||||||
|
|
||||||
let button_id = button_id.map(|id| id.to_str()).unwrap_or_default();
|
|
||||||
|
|
||||||
seed::button![
|
|
||||||
C!["styledButton", class_list],
|
|
||||||
attrs![At::Id => button_id, At::Type => button_type],
|
|
||||||
IF![disabled => attrs![At::Disabled => true]],
|
|
||||||
handler,
|
|
||||||
icon_node,
|
|
||||||
content,
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user