@@ -8,7 +8,7 @@ window.React = {createElement, Fragment};
8
8
9
9
/* TYPES */
10
10
11
- type IDatum = Observable < { id : string , label : Observable < string > , selected : Observable < boolean > , className : Observable < string > } > ;
11
+ type IDatum = { id : string , label : Observable < string > , selected : Observable < boolean > , className : Observable < string > } ;
12
12
13
13
type IData = IDatum [ ] ;
14
14
@@ -39,7 +39,7 @@ const buildData = (() => {
39
39
const label = $ ( `${ adjective } ${ color } ${ noun } ` ) ;
40
40
const selected = $ ( false ) ;
41
41
const className = $ ( '' ) ;
42
- const datum = $ ( { id, label, selected, className } ) ;
42
+ const datum : IDatum = { id, label, selected, className } ;
43
43
data [ i ] = datum ;
44
44
} ;
45
45
return data ;
@@ -53,7 +53,7 @@ const Model = (() => {
53
53
/* STATE */
54
54
55
55
let $data = $ < IDatum [ ] > ( [ ] ) ;
56
- let $ selected : IDatum | null = null ;
56
+ let selected : IDatum | null = null ;
57
57
58
58
/* API */
59
59
@@ -71,26 +71,25 @@ const Model = (() => {
71
71
} ;
72
72
73
73
const add = ( ) : void => {
74
- $data ( [ ... $data ( ) , ... buildData ( 1000 ) ] ) ;
74
+ $data ( $data ( ) . concat ( buildData ( 1000 ) ) ) ;
75
75
} ;
76
76
77
77
const update = ( ) : void => {
78
78
const data = $data ( ) ;
79
79
for ( let i = 0 , l = data . length ; i < l ; i += 10 ) {
80
- const $datum = data [ i ] ;
81
- const datum = $datum ( ) ;
82
- datum . label ( datum . label ( ) + ' !!!' ) ;
80
+ const { label} = data [ i ] ;
81
+ label ( label ( ) + ' !!!' ) ;
83
82
}
84
83
} ;
85
84
86
85
const swapRows = ( ) : void => {
87
86
const data = $data ( ) ;
88
87
if ( data . length <= 998 ) return ;
89
- const pos1$ = data [ 1 ] ;
90
- const pos998$ = data [ 998 ] ;
88
+ const datum1 = data [ 1 ] ;
89
+ const datum998 = data [ 998 ] ;
91
90
const data2 = data . slice ( ) ;
92
- data2 [ 1 ] = pos998$ ;
93
- data2 [ 998 ] = pos1$ ;
91
+ data2 [ 1 ] = datum998 ;
92
+ data2 [ 998 ] = datum1 ;
94
93
$data ( data2 ) ;
95
94
} ;
96
95
@@ -100,25 +99,26 @@ const Model = (() => {
100
99
101
100
const remove = ( id : string ) : void => {
102
101
const data = $data ( ) ;
103
- const index = data . findIndex ( datum => datum . sample ( ) . id === id ) ;
104
- $data ( [ ...data . slice ( 0 , index ) , ...data . slice ( index + 1 ) ] ) ;
102
+ const index = data . findIndex ( datum => datum . id === id ) ;
103
+ if ( index === - 1 ) return ;
104
+ $data ( data . slice ( 0 , index ) . concat ( data . slice ( index + 1 ) ) ) ;
105
105
} ;
106
106
107
107
const select = ( id : string ) : void => {
108
- if ( $ selected ) {
109
- const datum = $ selected ( ) ;
110
- datum . selected ( false ) ;
111
- datum . className ( '' ) ;
108
+ if ( selected ) {
109
+ selected . selected ( false ) ;
110
+ selected . className ( '' ) ;
111
+ selected = null ;
112
112
}
113
113
const data = $data ( ) ;
114
- const $ datum = data . find ( datum => datum . sample ( ) . id === id ) ! ;
115
- const datum = $ datum ( ) ;
114
+ const datum = data . find ( datum => datum . id === id ) ;
115
+ if ( ! datum ) return ;
116
116
datum . selected ( true ) ;
117
117
datum . className ( 'danger' ) ;
118
- $ selected = $ datum;
118
+ selected = datum ;
119
119
} ;
120
120
121
- return { $data, $ selected, run, runLots, runWith, add, update, swapRows, clear, remove, select } ;
121
+ return { $data, selected, run, runLots, runWith, add, update, swapRows, clear, remove, select } ;
122
122
123
123
} ) ( ) ;
124
124
@@ -131,7 +131,7 @@ const Button = ({ id, text, onClick }: { id: string, text: string, onClick: (( e
131
131
) ;
132
132
133
133
const RowDynamic = ( { id, label, className, onSelect, onRemove } : { id : ObservableMaybe < string > , label : ObservableMaybe < string > , className : ObservableMaybe < string > , onSelect : ObservableMaybe < ( ( event : MouseEvent ) => any ) > , onRemove : ObservableMaybe < ( ( event : MouseEvent ) => any ) > } ) : JSX . Element => (
134
- < tr class = { className } >
134
+ < tr className = { className } >
135
135
< td class = "col-md-1" > { id } </ td >
136
136
< td class = "col-md-4" >
137
137
< a onClick = { onSelect } > { label } </ a >
@@ -145,7 +145,7 @@ const RowDynamic = ({ id, label, className, onSelect, onRemove }: { id: Observab
145
145
</ tr >
146
146
) ;
147
147
148
- const RowTemplate = template ( RowDynamic ) ;
148
+ const RowTemplate = template ( RowDynamic , { recycle : true } ) ;
149
149
150
150
const App = ( ) : JSX . Element => {
151
151
@@ -173,10 +173,10 @@ const App = (): JSX.Element => {
173
173
< table class = "table table-hover table-striped test-data" >
174
174
< tbody >
175
175
< For values = { $data } >
176
- { ( $ datum : IDatum ) => {
177
- const { id, label, className} = $ datum ( ) ;
178
- const onSelect = ( ) => select ( id ) ;
179
- const onRemove = ( ) => remove ( id ) ;
176
+ { ( datum : IDatum ) => {
177
+ const { id, label, className} = datum ;
178
+ const onSelect = select . bind ( undefined , id ) ;
179
+ const onRemove = remove . bind ( undefined , id ) ;
180
180
const props = { id, label, className, onSelect, onRemove} ;
181
181
return RowTemplate ( props ) ;
182
182
// return RowDynamic ( props );
0 commit comments