@@ -5,21 +5,11 @@ use rand::prelude::*;
5
5
6
6
fn main ( ) {
7
7
// for performance reasons, we want to cache these strings on the edge of js/rust boundary
8
- for & name in ADJECTIVES
9
- . iter ( )
10
- . chain ( NOUNS . iter ( ) )
11
- . chain ( COLOURS . iter ( ) )
12
- {
8
+ for & name in ADJECTIVES . iter ( ) . chain ( NOUNS . iter ( ) ) . chain ( COLOURS . iter ( ) ) {
13
9
wasm_bindgen:: intern ( name) ;
14
- }
15
-
16
- dioxus:: web:: launch ( app) ;
17
- }
10
+ }
18
11
19
- fn app1 ( cx : Scope ) -> Element {
20
- cx. render ( rsx ! {
21
- div { "hello, wasm!" }
22
- } )
12
+ dioxus:: web:: launch ( app) ;
23
13
}
24
14
25
15
#[ derive( Clone , PartialEq ) ]
@@ -62,7 +52,8 @@ impl LabelsContainer {
62
52
}
63
53
64
54
fn append ( & mut self , num : usize ) {
65
- self . labels . extend ( Label :: new_list ( 1_000 , self . last_key + 1 ) ) ;
55
+ self . labels
56
+ . extend ( Label :: new_list ( 1_000 , self . last_key + 1 ) ) ;
66
57
self . last_key += num;
67
58
}
68
59
@@ -77,16 +68,14 @@ impl LabelsContainer {
77
68
}
78
69
}
79
70
80
- #[ feature( int_roundings) ]
81
71
fn remove ( & mut self , index : usize ) {
82
72
self . labels . remove ( index as usize ) ;
83
73
}
84
-
85
74
}
86
75
87
76
fn app ( cx : Scope ) -> Element {
88
77
let labels_container = use_ref ( & cx, || LabelsContainer :: new ( 0 , 0 ) ) ;
89
- let selected: & UseState < Option < usize > > = use_state ( & cx, || None ) ;
78
+ let selected = use_state ( & cx, || None as Option < usize > ) ;
90
79
91
80
cx. render ( rsx ! {
92
81
div { class: "container" ,
@@ -117,31 +106,55 @@ fn app(cx: Scope) -> Element {
117
106
}
118
107
}
119
108
}
109
+
120
110
table { class: "table table-hover table-striped test-data" ,
121
111
tbody { id: "tbody" ,
122
- labels_container. read( ) . labels. iter( ) . enumerate( ) . map( |( index, item) | {
123
- let key = item. key;
124
- let is_in_danger = if ( * selected) . map( |s| s == item. key) . unwrap_or( false ) { "danger" } else { "" } ;
125
- rsx!( tr { key: "{key}" , class: "{is_in_danger}" ,
126
- td { class: "col-md-1" , "{key}" }
127
- td { class: "col-md-4" , onclick: move |_| selected. set( Some ( key) ) ,
128
- a { class: "lbl" , [ item. labels. join( " " ) . as_str( ) ] }
129
- }
130
- td { class: "col-md-1" ,
131
- a { class: "remove" , onclick: move |_| { labels_container. write( ) . remove( index) ; } ,
132
- span { class: "glyphicon glyphicon-remove remove" , aria_hidden: "true" }
133
- }
134
- }
135
- td { class: "col-md-6" }
136
- } )
112
+ labels_container. read( ) . labels. iter( ) . enumerate( ) . map( |( idx, _) | rsx! {
113
+ Row {
114
+ labels: labels_container. clone( ) ,
115
+ selected: selected. clone( ) ,
116
+ key: "{idx}" ,
117
+ index: idx
118
+ }
137
119
} )
138
120
}
139
- }
121
+ }
122
+
140
123
span { class: "preloadicon glyphicon glyphicon-remove" , aria_hidden: "true" }
141
124
}
142
125
} )
143
126
}
144
127
128
+ #[ inline_props]
129
+ fn Row (
130
+ cx : Scope ,
131
+ labels : UseRef < LabelsContainer > ,
132
+ selected : UseState < Option < usize > > ,
133
+ index : usize ,
134
+ ) -> Element {
135
+ let item = & labels. read ( ) . labels [ * index] ;
136
+ let is_in_danger = if * * selected == Some ( * index) {
137
+ "danger"
138
+ } else {
139
+ ""
140
+ } ;
141
+
142
+ cx. render ( rsx ! {
143
+ tr { class: "{is_in_danger}" ,
144
+ td { class: "col-md-1" , "{index}" }
145
+ td { class: "col-md-4" , onclick: move |_| selected. set( Some ( * index) ) ,
146
+ a { class: "lbl" , [ item. labels. join( " " ) . as_str( ) ] }
147
+ }
148
+ td { class: "col-md-1" ,
149
+ a { class: "remove" , onclick: move |_| { labels. write( ) . remove( * index) ; } ,
150
+ span { class: "glyphicon glyphicon-remove remove" , aria_hidden: "true" }
151
+ }
152
+ }
153
+ td { class: "col-md-6" }
154
+ }
155
+ } )
156
+ }
157
+
145
158
#[ derive( Props ) ]
146
159
struct ActionButtonProps < ' a > {
147
160
name : & ' a str ,
@@ -158,7 +171,6 @@ fn ActionButton<'a>(cx: Scope<'a, ActionButtonProps<'a>>) -> Element {
158
171
r#type: "button" ,
159
172
id: "{cx.props.id}" ,
160
173
onclick: move |_| cx. props. onclick. call( ( ) ) ,
161
-
162
174
"{cx.props.name}"
163
175
}
164
176
}
0 commit comments