[][src]Struct yew_styles::text::Text

pub struct Text { /* fields omitted */ }

Text

Features required

text

Example

use lipsum::lipsum;
use wasm_bindgen::JsCast;
use web_sys::Element;
use yew::prelude::*;
use yew::utils;
use yew_styles::layouts::{
    container::{Container, Direction, Wrap},
    item::{Item, ItemLayout},
};
use yew_styles::styles::{Palette, Size, Style};
use yew_styles::text::{Text, TextType};

pub enum Msg {
  Dragged(DragEvent),
  DraggedOver(DragEvent),
  Dropped(DragEvent),
}

pub struct TextExample {
 link: ComponentLink<Self>,
}

impl Component for TextPage {
    type Message = Msg;
    type Properties = ();

    fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {
        TextPage { link }
    }

    fn update(&mut self, msg: Self::Message) -> ShouldRender {
        match msg {
            Msg::Dragged(drag_event) => {
                let target_id = drag_event
                    .target()
                    .unwrap()
                    .dyn_into::<Element>()
                    .unwrap()
                    .id();

                drag_event
                    .data_transfer()
                    .unwrap()
                    .set_data("application/text-component", &target_id)
                    .unwrap();

                drag_event.data_transfer().unwrap().set_drop_effect("move");
            }
            Msg::DraggedOver(drag_event) => {
                drag_event.prevent_default();

                drag_event.data_transfer().unwrap().set_drop_effect("move");
            }

            Msg::Dropped(drag_event) => {
                drag_event.prevent_default();

                let data = drag_event
                    .data_transfer()
                    .unwrap()
                    .get_data("application/text-component")
                    .unwrap();

                let target_element = drag_event.target().unwrap().dyn_into::<Element>().unwrap();

                target_element
                    .append_child(&utils::document().get_element_by_id(&data).unwrap())
                    .unwrap();
            }
        };
        true
    }

    fn change(&mut self, _props: Self::Properties) -> ShouldRender {
        false
    }

    fn view(&self) -> Html {
        html! {
            <Container wrap = Wrap::Wrap direction = Direction::Row>
                <Item layouts=vec!(ItemLayout::ItL(4), ItemLayout::ItM(6), ItemLayout::ItXs(12))>
                    <div
                        ondrop=self.link.callback(|e| Msg::Dropped(e))
                        ondragover=self.link.callback(|e| Msg::DraggedOver(e))
                        class="tag-box"
                    >
                        {get_draggable_tags(self.link.clone())}
                    </div>
                </Item>
                <Item layouts=vec!(ItemLayout::ItL(4), ItemLayout::ItM(6), ItemLayout::ItXs(12))>
                    <div ondrop=self.link.callback(Msg::Dropped)
                        ondragover=self.link.callback(Msg::DraggedOver)
                        class="tag-box">
                    </div>
                </Item>
            </Container>
        }
    }
}

fn get_draggable_tags(link: ComponentLink<TextPage>) -> Html {
    let styles = vec![Style::Regular, Style::Outline, Style::Light];
    let palette = vec![Palette::Success, Palette::Warning, Palette::Danger];
    let mut index = 0;
     
    styles
        .into_iter()
        .map(|style| {
            palette
                .clone()
                .into_iter()
                .map(|item_palette| {
                    let text_view = html! {
                        <Text
                            class_name="draggable-tag"
                            id=format!("tag-{}", index)
                            draggable=true
                            ondragstart_signal=link.callback(Msg::Dragged)
                            text_type=TextType::Tag
                            text_size=Size::Medium
                            text=lipsum(1).replace(".", "")
                            text_style=style.clone()
                            text_palette=item_palette
                            interaction_effect= true
                        />
                    };
     
                    index += 1;
     
                    text_view
                })
                .collect::<Html>()
    })
    .collect::<Html>()
}

Trait Implementations

impl Component for Text[src]

type Message = Msg

Messages are used to make Components dynamic and interactive. Simple Component's can declare their Message type to be (). Complex Component's commonly use an enum to declare multiple Message types. Read more

type Properties = Props

Properties are the inputs to a Component and should not mutated within a Component. They are passed to a Component using a JSX-style syntax. # use yew::{Html, Component, Properties, ComponentLink, html}; # struct Model; # #[derive(Clone, Properties)] # struct Props { # prop: String, # } # impl Component for Model { # type Message = ();type Properties = Props; # fn create(props: Self::Properties,link: ComponentLink<Self>) -> Self {unimplemented!()} # fn update(&mut self,msg: Self::Message) -> bool {unimplemented!()} # fn change(&mut self, _: Self::Properties) -> bool {unimplemented!()} # fn view(&self) -> Html { html! { <Model prop="value" /> } # }} Read more

Auto Trait Implementations

impl !RefUnwindSafe for Text

impl !Send for Text

impl !Sync for Text

impl Unpin for Text

impl !UnwindSafe for Text

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Any for T where
    T: Any

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<COMP> Renderable for COMP where
    COMP: Component
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,