@@ -33,13 +33,13 @@ static ADJECTIVES: &[&str] = &[
33
33
] ;
34
34
35
35
static COLOURS : & [ & str ] = & [
36
- "red" , "yellow" , "blue" , "green" , "pink" , "brown" , "purple" , "brown" , "white" , "black" ,
37
- "orange" ,
36
+ "red" , "yellow" , "blue" , "green" , "pink" , "brown" , "purple" , "brown" ,
37
+ "white" , "black" , " orange",
38
38
] ;
39
39
40
40
static NOUNS : & [ & str ] = & [
41
- "table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" , "sandwich" , "burger" ,
42
- "pizza" , "mouse" , "keyboard" ,
41
+ "table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" ,
42
+ "sandwich" , "burger" , " pizza", "mouse" , "keyboard" ,
43
43
] ;
44
44
45
45
#[ derive( Copy , Debug , Clone , PartialEq , Eq , Hash ) ]
@@ -50,7 +50,7 @@ struct RowData {
50
50
51
51
static ID_COUNTER : AtomicUsize = AtomicUsize :: new ( 1 ) ;
52
52
53
- fn build_data ( cx : Scope , count : usize ) -> Vec < RowData > {
53
+ fn build_data ( count : usize ) -> Vec < RowData > {
54
54
let mut thread_rng = thread_rng ( ) ;
55
55
56
56
let mut data = Vec :: new ( ) ;
@@ -70,10 +70,11 @@ fn build_data(cx: Scope, count: usize) -> Vec<RowData> {
70
70
71
71
data. push ( RowData {
72
72
id : ID_COUNTER . load ( Ordering :: Relaxed ) ,
73
- label : create_signal ( cx , label) ,
73
+ label : create_signal ( label) ,
74
74
} ) ;
75
75
76
- ID_COUNTER . store ( ID_COUNTER . load ( Ordering :: Relaxed ) + 1 , Ordering :: Relaxed ) ;
76
+ ID_COUNTER
77
+ . store ( ID_COUNTER . load ( Ordering :: Relaxed ) + 1 , Ordering :: Relaxed ) ;
77
78
}
78
79
79
80
data
@@ -82,14 +83,13 @@ fn build_data(cx: Scope, count: usize) -> Vec<RowData> {
82
83
/// Button component.
83
84
#[ component]
84
85
fn Button (
85
- cx : Scope ,
86
86
/// ID for the button element
87
87
id : & ' static str ,
88
88
/// Text that should be included
89
89
text : & ' static str ,
90
90
) -> impl IntoView {
91
91
view ! {
92
- cx ,
92
+
93
93
<div class="col-sm-6 smallpad" >
94
94
<button
95
95
id=id
@@ -103,26 +103,26 @@ fn Button(
103
103
}
104
104
105
105
#[ component]
106
- fn App ( cx : Scope ) -> impl IntoView {
107
- let ( data, set_data) = create_signal ( cx , Vec :: < RowData > :: new ( ) ) ;
108
- let ( selected, set_selected) = create_signal ( cx , None :: < usize > ) ;
106
+ fn App ( ) -> impl IntoView {
107
+ let ( data, set_data) = create_signal ( Vec :: < RowData > :: new ( ) ) ;
108
+ let ( selected, set_selected) = create_signal ( None :: < usize > ) ;
109
109
110
110
let remove = move |id : usize | {
111
111
set_data. update ( move |data| data. retain ( |row| row. id != id) ) ;
112
112
} ;
113
113
114
114
let run = move |_| {
115
- set_data ( build_data ( cx , 1000 ) ) ;
115
+ set_data ( build_data ( 1000 ) ) ;
116
116
set_selected ( None ) ;
117
117
} ;
118
118
119
119
let run_lots = move |_| {
120
- set_data ( build_data ( cx , 10000 ) ) ;
120
+ set_data ( build_data ( 10000 ) ) ;
121
121
set_selected ( None ) ;
122
122
} ;
123
123
124
124
let add = move |_| {
125
- set_data. update ( move |data| data. append ( & mut build_data ( cx , 1000 ) ) ) ;
125
+ set_data. update ( move |data| data. append ( & mut build_data ( 1000 ) ) ) ;
126
126
} ;
127
127
128
128
let update = move |_| {
@@ -146,17 +146,17 @@ fn App(cx: Scope) -> impl IntoView {
146
146
} ) ;
147
147
} ;
148
148
149
- let is_selected = create_selector ( cx , selected) ;
149
+ let is_selected = create_selector ( selected) ;
150
150
151
151
view ! {
152
- cx ,
152
+
153
153
<div class="container" >
154
154
<div class="jumbotron" >
155
155
<div class="row" >
156
156
<div class="col-md-6" ><h1>"Leptos" </h1></div>
157
157
<div class="col-md-6" >
158
158
<div class="row" >
159
- <Button id="run" text="Create 1,000 rows" on: click=run/>
159
+ <Button id="run" text="Create 1,000 rows" on: click=run />
160
160
<Button id="runlots" text="Create 10,000 rows" on: click=run_lots />
161
161
<Button id="add" text="Append 1,000 rows" on: click=add />
162
162
<Button id="update" text="Update every 10th row" on: click=update />
@@ -171,16 +171,19 @@ fn App(cx: Scope) -> impl IntoView {
171
171
<For
172
172
each={ data}
173
173
key={ |row| row. id}
174
- view =move |cx , row: RowData | {
174
+ children =move |row: RowData | {
175
175
let row_id = row. id;
176
176
let ( label, _) = row. label;
177
- let is_selected = is_selected. clone( ) ;
178
- on_cleanup( cx, move || {
179
- label. dispose( ) ;
177
+ on_cleanup( {
178
+ let is_selected = is_selected. clone( ) ;
179
+ move || {
180
+ label. dispose( ) ;
181
+ is_selected. remove( & Some ( row_id) ) ;
182
+ }
180
183
} ) ;
184
+ let is_selected = is_selected. clone( ) ;
181
185
template! {
182
- cx,
183
- <tr class: danger={ move || is_selected( Some ( row_id) ) } >
186
+ <tr class: danger={ move || is_selected. selected( Some ( row_id) ) } >
184
187
<td class="col-md-1" >{ row_id. to_string( ) } </td>
185
188
<td class="col-md-4" ><a on: click=move |_| set_selected( Some ( row_id) ) >{ move || label. get( ) } </a></td>
186
189
<td class="col-md-1" ><a on: click=move |_| remove( row_id) ><span class="glyphicon glyphicon-remove" aria-hidden="true" ></span></a></td>
@@ -201,5 +204,5 @@ pub fn start() {
201
204
console_error_panic_hook:: set_once ( ) ;
202
205
203
206
let root = document ( ) . query_selector ( "#main" ) . unwrap ( ) . unwrap ( ) ;
204
- mount_to ( root. unchecked_into ( ) , |cx | view ! { cx , <App /> } ) ;
207
+ mount_to ( root. unchecked_into ( ) , || view ! { <App /> } ) ;
205
208
}
0 commit comments