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

pub struct Card { /* fields omitted */ }

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

impl Component for Card[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. Read more

Auto Trait Implementations

impl !RefUnwindSafe for Card

impl !Send for Card

impl !Sync for Card

impl Unpin for Card

impl !UnwindSafe for Card

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>,