#![allow(unused_variables)]
#![allow(dead_code)]
use super::set_on_input_handler;
use crate::text_inputs::{TextFieldType, ValidityState, ValidityTransform};
use crate::{to_option, to_option_string};
use gloo::events::EventListener;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use web_sys::Node;
pub use web_sys::ValidityState as NativeValidityState;
use yew::prelude::*;
pub struct TextArea {
props: TextAreaProps,
node_ref: NodeRef,
input_listener: Option<EventListener>,
}
#[derive(Clone)]
pub enum TextAreaCharCounter {
Internal,
External,
}
impl ToString for TextAreaCharCounter {
fn to_string(&self) -> String {
use TextAreaCharCounter::*;
match self {
Internal => "internal",
External => "external",
}
.to_string()
}
}
#[derive(Properties, Clone)]
pub struct TextAreaProps {
#[prop_or_default]
pub rows: Option<i64>,
#[prop_or_default]
pub cols: Option<i64>,
#[prop_or_default]
pub value: String,
#[prop_or(TextFieldType::Text)]
pub field_type: TextFieldType,
#[prop_or_default]
pub label: String,
#[prop_or_default]
pub placeholder: String,
#[prop_or_default]
pub icon: String,
#[prop_or_default]
pub icon_trailing: String,
#[prop_or_default]
pub disabled: bool,
#[prop_or_default]
pub char_counter: Option<TextAreaCharCounter>,
#[prop_or_default]
pub outlined: bool,
#[prop_or_default]
pub helper: String,
#[prop_or_default]
pub helper_persistent: bool,
#[prop_or_default]
pub required: bool,
#[prop_or_default]
pub max_length: String,
#[prop_or_default]
pub validation_message: String,
#[prop_or_default]
pub min: String,
#[prop_or_default]
pub max: String,
#[prop_or_default]
pub size: Option<i64>, #[prop_or_default] pub step: Option<i64>, #[prop_or_default]
pub auto_validate: bool,
#[prop_or_default]
pub validity_transform: Option<ValidityTransform>,
#[prop_or_default]
pub validate_on_initial_render: bool,
#[prop_or_default]
pub oninput: Callback<InputData>,
#[prop_or_default]
pub name: String,
}
impl Component for TextArea {
type Message = ();
type Properties = TextAreaProps;
fn create(props: Self::Properties, _: ComponentLink<Self>) -> Self {
Self {
props,
node_ref: NodeRef::default(),
input_listener: None,
}
}
fn update(&mut self, _msg: Self::Message) -> ShouldRender {
false
}
fn change(&mut self, props: Self::Properties) -> bool {
self.props = props;
true
}
fn view(&self) -> Html {
html! {
<label class="mdc-text-field mdc-text-field--filled mdc-text-field--textarea mdc-text-field--no-label">
<span class="mdc-text-field__ripple"></span>
<span class="mdc-text-field__resizer">
<textarea class="mdc-text-field__input" rows="8" cols="40" aria-label="Label"></textarea>
</span>
<span class="mdc-line-ripple"></span>
</label>
}
}
fn rendered(&mut self, first_render: bool) {
}
}
impl TextArea {
pub fn validity_transform<F: Fn(String, NativeValidityState) -> ValidityState + 'static>(
func: F,
) -> ValidityTransform {
ValidityTransform::new(func)
}
}