Struct yew_styles::card::Card[][src]

pub struct Card { /* fields omitted */ }
Expand description

Card

Features required

card

Example

use inflector::Inflector;
use lipsum::lipsum;
use wasm_bindgen::JsCast;
use web_sys::Element;
use yew::prelude::*;
use yew::utils;
use yew_prism::Prism;
use yew_styles::card::Card;
use yew_styles::styles::{Palette, Size, Style};
use yew_styles::layouts::{
    container::{Container, Direction, Wrap},
    item::{Item, ItemLayout},
};

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

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

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

    fn create(_: Self::Properties, link: ComponentLink<Self>) -> Self {
        CardPage { 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/card-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/card-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 direction=Direction::Row wrap=Wrap::Wrap>
                <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="box">
                    {"Box 1"}
                    <Card
                        card_style=Style::Light
                        card_palette=Palette::Success
                        card_size=Size::Medium
                        draggable=true
                        ondragstart_signal=self.link.callback(Msg::Dragged)
                        id="card-draggable"
                        header=Some(html!{<div class="image">
                            {"Image"}
                        </div>})
                        body=Some(html!{
                            <div class="content">{lipsum(10)}</div>
                        })
                        footer=Some(html!{
                            <div>{lipsum(3)}</div>
                        })
                    />
                </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="box">
                        {"Box 2"}
                    </div>
                </Item>
            </Container>
        }
    }
}

Trait Implementations

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

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. Read more

Components are created with their properties as well as a ComponentLink which can be used to send messages and create callbacks for triggering updates. Read more

Components handle messages in their update method and commonly use this method to update their state and (optionally) re-render themselves. Read more

When the parent of a Component is re-rendered, it will either be re-created or receive new properties in the change lifecycle method. Component’s can choose to re-render if the new properties are different than the previously received properties. Most Component’s will use props with a PartialEq impl and will be implemented like this: Read more

Components define their visual layout using a JSX-style syntax through the use of the html! procedural macro. The full guide to using the macro can be found in Yew’s documentation. Read more

The rendered method is called after each time a Component is rendered but before the browser updates the page. Read more

The destroy method is called right before a Component is unmounted.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

Convert self to an optional value of a Properties struct.

Convert self to a value of a Properties struct.

Convert self to a value of a Properties struct.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.