Skip to content

Commit c0d6d73

Browse files
Avoiding wrapping rows in observables for no reason
1 parent c9e767c commit c0d6d73

File tree

1 file changed

+19
-21
lines changed

1 file changed

+19
-21
lines changed

frameworks/keyed/voby/src/main.tsx

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ window.React = {createElement, Fragment};
88

99
/* TYPES */
1010

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> };
1212

1313
type IData = IDatum[];
1414

@@ -39,7 +39,7 @@ const buildData = (() => {
3939
const label = $(`${adjective} ${color} ${noun}`);
4040
const selected = $(false);
4141
const className = $('');
42-
const datum = $({ id, label, selected, className });
42+
const datum: IDatum = { id, label, selected, className };
4343
data[i] = datum;
4444
};
4545
return data;
@@ -53,7 +53,7 @@ const Model = (() => {
5353
/* STATE */
5454

5555
let $data = $<IDatum[]>( [] );
56-
let $selected: IDatum | null = null;
56+
let selected: IDatum | null = null;
5757

5858
/* API */
5959

@@ -77,19 +77,19 @@ const Model = (() => {
7777
const update = (): void => {
7878
const data = $data ();
7979
for ( let i = 0, l = data.length; i < l; i += 10 ) {
80-
const {label} = data[i]();
80+
const {label} = data[i];
8181
label ( label () + ' !!!' );
8282
}
8383
};
8484

8585
const swapRows = (): void => {
8686
const data = $data ();
8787
if ( data.length <= 998 ) return;
88-
const pos1$ = data[1];
89-
const pos998$ = data[998];
88+
const datum1 = data[1];
89+
const datum998 = data[998];
9090
const data2 = data.slice ();
91-
data2[1] = pos998$;
92-
data2[998] = pos1$;
91+
data2[1] = datum998;
92+
data2[998] = datum1;
9393
$data ( data2 );
9494
};
9595

@@ -99,28 +99,26 @@ const Model = (() => {
9999

100100
const remove = ( id: string ): void => {
101101
const data = $data ();
102-
const index = data.findIndex ( datum => datum.sample ().id === id );
102+
const index = data.findIndex ( datum => datum.id === id );
103103
if ( index === -1 ) return;
104104
$data ( data.slice ( 0, index ).concat ( data.slice ( index + 1 ) ) );
105105
};
106106

107107
const select = ( id: string ): void => {
108-
if ( $selected ) {
109-
const datum = $selected ();
110-
datum.selected ( false );
111-
datum.className ( '' );
112-
$selected = null;
108+
if ( selected ) {
109+
selected.selected ( false );
110+
selected.className ( '' );
111+
selected = null;
113112
}
114113
const data = $data ();
115-
const $datum = data.find ( datum => datum.sample ().id === id );
116-
if ( !$datum ) return;
117-
const datum = $datum ();
114+
const datum = data.find ( datum => datum.id === id );
115+
if ( !datum ) return;
118116
datum.selected ( true );
119117
datum.className ( 'danger' );
120-
$selected = $datum;
118+
selected = datum;
121119
};
122120

123-
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 };
124122

125123
})();
126124

@@ -175,8 +173,8 @@ const App = (): JSX.Element => {
175173
<table class="table table-hover table-striped test-data">
176174
<tbody>
177175
<For values={$data}>
178-
{( $datum: IDatum ) => {
179-
const {id, label, className} = $datum ();
176+
{( datum: IDatum ) => {
177+
const {id, label, className} = datum;
180178
const onSelect = select.bind ( undefined, id );
181179
const onRemove = remove.bind ( undefined, id );
182180
const props = {id, label, className, onSelect, onRemove};

0 commit comments

Comments
 (0)