1
1
import { defineComponent , ref , shallowRef } from 'strve-rv' ;
2
2
import { buildData } from './data.js' ;
3
3
4
- const Main = defineComponent ( ( ) => {
5
- const selected = ref ( ) ;
6
- const rows = shallowRef ( [ ] ) ;
7
-
8
- function setRows ( update = rows . value . slice ( ) ) {
9
- rows . value = update ;
10
- }
11
-
12
- function add ( ) {
13
- rows . value = rows . value . concat ( buildData ( 1000 ) ) ;
14
- }
4
+ const selected = ref ( ) ;
5
+ const rows = shallowRef ( [ ] ) ;
6
+ function setRows ( update = rows . value . slice ( ) ) {
7
+ rows . value = update ;
8
+ }
15
9
10
+ const TbodyComponent = defineComponent ( ( ) => {
16
11
function remove ( id ) {
17
12
rows . value . splice (
18
13
rows . value . findIndex ( ( d ) => d . id === id ) ,
@@ -25,6 +20,31 @@ const Main = defineComponent(() => {
25
20
selected . value = id ;
26
21
}
27
22
23
+ return ( ) => (
24
+ < tbody >
25
+ { rows . value . map ( ( { id, label } ) => (
26
+ < tr class = { id === selected . value ? 'danger' : '' } key = { id } >
27
+ < td class = 'col-md-1' > { id } </ td >
28
+ < td class = 'col-md-4' >
29
+ < a onClick = { ( ) => select ( id ) } > { label } </ a >
30
+ </ td >
31
+ < td class = 'col-md-1' >
32
+ < a onClick = { ( ) => remove ( id ) } >
33
+ < span class = 'glyphicon glyphicon-remove' aria-hidden = 'true' > </ span >
34
+ </ a >
35
+ </ td >
36
+ < td class = 'col-md-6' > </ td >
37
+ </ tr >
38
+ ) ) }
39
+ </ tbody >
40
+ ) ;
41
+ } ) ;
42
+
43
+ const Main = defineComponent ( ( ) => {
44
+ function add ( ) {
45
+ rows . value = rows . value . concat ( buildData ( 1000 ) ) ;
46
+ }
47
+
28
48
function run ( ) {
29
49
setRows ( buildData ( ) ) ;
30
50
selected . value = undefined ;
@@ -118,33 +138,7 @@ const Main = defineComponent(() => {
118
138
</ div >
119
139
</ div >
120
140
< table class = 'table table-hover table-striped test-data' >
121
- < tbody
122
- onClick = { ( event ) => {
123
- const el = event . target ;
124
- const id = Number ( el . closest ( 'tr' ) . firstChild . textContent ) ;
125
- if ( el . matches ( '.glyphicon-remove' ) ) {
126
- remove ( id ) ;
127
- } else {
128
- select ( id ) ;
129
- }
130
- return false ;
131
- } }
132
- >
133
- { rows . value . map ( ( item ) => (
134
- < tr class = { item . id === selected . value ? 'danger' : '' } key = { item . id } >
135
- < td class = 'col-md-1' > { item . id } </ td >
136
- < td class = 'col-md-4' >
137
- < a > { item . label } </ a >
138
- </ td >
139
- < td class = 'col-md-1' >
140
- < a >
141
- < span class = 'glyphicon glyphicon-remove' aria-hidden = 'true' > </ span >
142
- </ a >
143
- </ td >
144
- < td class = 'col-md-6' > </ td >
145
- </ tr >
146
- ) ) }
147
- </ tbody >
141
+ < component $is = { TbodyComponent } />
148
142
</ table >
149
143
< span class = 'preloadicon glyphicon glyphicon-remove' aria-hidden = 'true' > </ span >
150
144
</ fragment >
0 commit comments