1
1
2
2
/* IMPORT */
3
3
4
- import { FunctionMaybe , Observable , ObservableMaybe } from 'voby' ;
5
- import { $ , createElement , render , template , useSelector , For , Fragment } from 'voby' ;
4
+ import { FunctionMaybe , Observable , ObservableMaybe } from 'voby/src ' ;
5
+ import { $ , createElement , render , template , useSelector , For , Fragment } from 'voby/src ' ;
6
6
7
7
window . React = { createElement, Fragment} ;
8
8
@@ -40,7 +40,7 @@ const buildData = (() => {
40
40
41
41
/* MODEL */
42
42
43
- const Model = ( ( ) => {
43
+ const ModelClean = ( ( ) => {
44
44
45
45
/* STATE */
46
46
@@ -58,55 +58,39 @@ const Model = (() => {
58
58
} ;
59
59
60
60
const runWith = ( length : number ) : void => {
61
- clear ( ) ;
62
61
$data ( buildData ( length ) ) ;
63
62
} ;
64
63
65
64
const add = ( ) : void => {
66
- const data = $data ( ) ;
67
- data . push . apply ( data , buildData ( 1000 ) ) ;
68
- $data . emit ( ) ;
65
+ $data . update ( data => [ ...data , ...buildData ( 1000 ) ] ) ;
69
66
} ;
70
67
71
68
const update = ( ) : void => {
72
69
const data = $data ( ) ;
73
70
for ( let i = 0 , l = data . length ; i < l ; i += 10 ) {
74
- const { label} = data [ i ] ;
75
- label . update ( label => label + ' !!!' ) ;
71
+ data [ i ] . label . update ( label => label + ' !!!' ) ;
76
72
}
77
73
} ;
78
74
79
75
const swapRows = ( ) : void => {
80
- const data = $data ( ) ;
76
+ const data = $data ( ) . slice ( ) ;
81
77
if ( data . length <= 998 ) return ;
82
78
const datum1 = data [ 1 ] ;
83
79
const datum998 = data [ 998 ] ;
84
80
data [ 1 ] = datum998 ;
85
81
data [ 998 ] = datum1 ;
86
- $data . emit ( ) ;
87
- } ;
88
-
89
- const dispose = ( ) : void => {
90
- const data = $data ( ) ;
91
- for ( let i = 0 , l = data . length ; i < l ; i ++ ) {
92
- data [ i ] . label . dispose ( ) ;
93
- }
94
- isSelected . dispose ( ) ;
82
+ $data ( data ) ;
95
83
} ;
96
84
97
85
const clear = ( ) : void => {
98
- dispose ( ) ;
99
86
$data ( [ ] ) ;
100
87
} ;
101
88
102
- const remove = ( id : number ) : void => {
103
- const data = $data ( ) ;
104
- const index = data . findIndex ( datum => datum . id === id ) ;
105
- if ( index === - 1 ) return ;
106
- const datum = data [ index ] ;
107
- datum . label . dispose ( ) ;
108
- data . splice ( index , 1 ) ;
109
- $data . emit ( ) ;
89
+ const remove = ( id : number ) : void => {
90
+ $data . update ( data => {
91
+ const idx = data . findIndex ( datum => datum . id === id ) ;
92
+ return [ ...data . slice ( 0 , idx ) , ...data . slice ( idx + 1 ) ] ;
93
+ } ) ;
110
94
} ;
111
95
112
96
const select = ( id : number ) : void => {
@@ -115,7 +99,7 @@ const Model = (() => {
115
99
116
100
const isSelected = useSelector ( $selected ) ;
117
101
118
- return { $data, $selected, run, runLots, runWith, add, update, swapRows, dispose , clear, remove, select, isSelected } ;
102
+ return { $data, $selected, run, runLots, runWith, add, update, swapRows, clear, remove, select, isSelected } ;
119
103
120
104
} ) ( ) ;
121
105
@@ -144,7 +128,7 @@ const Row = template (({ id, label, className, onSelect, onRemove }: { id: Funct
144
128
145
129
const App = ( ) : JSX . Element => {
146
130
147
- const { $data, run, runLots, add, update, swapRows, clear, remove, select, isSelected} = Model ;
131
+ const { $data, run, runLots, add, update, swapRows, clear, remove, select, isSelected} = ModelClean ;
148
132
149
133
return (
150
134
< div class = "container" >
0 commit comments