Skip to content

Commit b011567

Browse files
committed
Merge branch 'fabiospampinato-voby-0.2.0'
2 parents 986b4a4 + f1927cd commit b011567

File tree

3 files changed

+46
-59
lines changed

3 files changed

+46
-59
lines changed

frameworks/keyed/voby/package-lock.json

Lines changed: 17 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/keyed/voby/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "js-framework-benchmark-voby",
3-
"version": "0.0.1",
3+
"version": "0.5.0",
44
"main": "dist/main.js",
55
"js-framework-benchmark": {
66
"frameworkVersionFromPackage": "voby"
@@ -16,7 +16,7 @@
1616
"url": "https://github.com/krausest/js-framework-benchmark.git"
1717
},
1818
"dependencies": {
19-
"voby": "0.1.0"
19+
"voby": "0.5.0"
2020
},
2121
"devDependencies": {
2222
"esbuild": "0.14.23"

frameworks/keyed/voby/src/main.tsx

Lines changed: 27 additions & 27 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

@@ -71,26 +71,25 @@ const Model = (() => {
7171
};
7272

7373
const add = (): void => {
74-
$data ( [...$data (), ...buildData ( 1000 )] );
74+
$data ( $data ().concat ( buildData ( 1000 ) ) );
7575
};
7676

7777
const update = (): void => {
7878
const data = $data ();
7979
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 () + ' !!!' );
8382
}
8483
};
8584

8685
const swapRows = (): void => {
8786
const data = $data ();
8887
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];
9190
const data2 = data.slice ();
92-
data2[1] = pos998$;
93-
data2[998] = pos1$;
91+
data2[1] = datum998;
92+
data2[998] = datum1;
9493
$data ( data2 );
9594
};
9695

@@ -100,25 +99,26 @@ const Model = (() => {
10099

101100
const remove = ( id: string ): void => {
102101
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 ) ) );
105105
};
106106

107107
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;
112112
}
113113
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;
116116
datum.selected ( true );
117117
datum.className ( 'danger' );
118-
$selected = $datum;
118+
selected = datum;
119119
};
120120

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

123123
})();
124124

@@ -131,7 +131,7 @@ const Button = ({ id, text, onClick }: { id: string, text: string, onClick: (( e
131131
);
132132

133133
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}>
135135
<td class="col-md-1">{id}</td>
136136
<td class="col-md-4">
137137
<a onClick={onSelect}>{label}</a>
@@ -145,7 +145,7 @@ const RowDynamic = ({ id, label, className, onSelect, onRemove }: { id: Observab
145145
</tr>
146146
);
147147

148-
const RowTemplate = template ( RowDynamic );
148+
const RowTemplate = template ( RowDynamic, { recycle: true } );
149149

150150
const App = (): JSX.Element => {
151151

@@ -173,10 +173,10 @@ const App = (): JSX.Element => {
173173
<table class="table table-hover table-striped test-data">
174174
<tbody>
175175
<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 );
180180
const props = {id, label, className, onSelect, onRemove};
181181
return RowTemplate ( props );
182182
// return RowDynamic ( props );

0 commit comments

Comments
 (0)