Skip to content

Commit 38c987f

Browse files
committed
apply review
1 parent 2034181 commit 38c987f

18 files changed

Lines changed: 71 additions & 78 deletions

experiments/server-components/lib/counter.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,6 @@ class CounterState extends State<Counter>
4040
[.text("Increase by ${component.step}")],
4141
),
4242
if (component.child != null) component.child!,
43-
button(
44-
onClick: () {
45-
context.reload();
46-
},
47-
[.text('Reload Page')],
48-
),
4943
]);
5044
}
5145
}

experiments/server-components/lib/main.client.options.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ ClientOptions get defaultClientOptions => ClientOptions(
3030
'counter': ClientLoader(
3131
(p) => _counter.Counter(
3232
step: p.get<int>('step'),
33-
child: p.mount(p.get<String>('child')),
33+
child: p.mountOrNull(p.get<String?>('child')),
3434
),
3535
loader: _counter.loadLibrary,
3636
),

experiments/server-components/lib/main.server.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,7 @@ void main() {
1616
var time = DateTime.now();
1717
return div(classes: 'server', [
1818
p([.text('Server Time: $time')]),
19-
Counter(
20-
step: time.second,
21-
child: p(classes: 'server', [
22-
.text('This is a server component, rendered at $time.'),
23-
MiniCounter(),
24-
]),
25-
),
19+
Counter(step: time.second, child: null),
2620
]);
2721
},
2822
),

packages/jaspr/lib/src/client/client_binding.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import '../foundation/binding.dart';
1111
import '../foundation/constants.dart';
1212
import '../framework/framework.dart';
1313
import 'dom_render_object.dart';
14-
import 'utils.dart';
1514

1615
/// Global component binding for the client.
1716
class ClientAppBinding extends AppBinding with ComponentsBinding {
1817
ClientAppBinding() {
19-
initializeEvents();
18+
if (kDebugMode) {
19+
_debugInitializeEvents();
20+
}
2021
}
2122

2223
@override
@@ -70,25 +71,25 @@ class ClientAppBinding extends AppBinding with ComponentsBinding {
7071
web.console.error('Error while building ${element.component.runtimeType}:\n$error\n\n$stackTrace'.toJS);
7172
}
7273

73-
SseClient? _eventsClient;
74+
SseClient? _debugEventsClient;
7475

75-
void initializeEvents() {
76-
if (_eventsClient != null) return;
76+
void _debugInitializeEvents() {
77+
if (_debugEventsClient != null) return;
7778

78-
_eventsClient = SseClient(r'/$jasprEventsHandler');
79-
_eventsClient!.stream.listen(
79+
_debugEventsClient = SseClient(r'/$jasprEventsHandler');
80+
_debugEventsClient!.stream.listen(
8081
(event) {
8182
final data = jsonDecode(event);
8283
if (data case ['ReloadRequest']) {
8384
_reloadPage();
8485
}
8586
},
8687
onDone: () {
87-
_eventsClient!.close();
88-
_eventsClient = null;
88+
_debugEventsClient!.close();
89+
_debugEventsClient = null;
8990
},
9091
);
91-
_eventsClient!.sink.add(jsonEncode(['RouteInfo', web.window.location.pathname]));
92+
_debugEventsClient!.sink.add(jsonEncode(['RouteInfo', web.window.location.pathname]));
9293
}
9394

9495
void _reloadPage([String? path]) async {
@@ -114,8 +115,7 @@ class ClientAppBinding extends AppBinding with ComponentsBinding {
114115
final newNode = _attachTarget == 'body' ? body : body.querySelector(_attachTarget)!;
115116

116117
final rootRenderObject = rootElement!.renderObject as RootDomRenderObject;
117-
rootRenderObject.node = newNode;
118-
rootRenderObject.toHydrate = [...newNode.childNodes.toIterable()];
118+
rootRenderObject.setRootNode(newNode);
119119
rootElement!.owner.performReload(rootElement!);
120120

121121
web.document.body!.replaceWith(body);

packages/jaspr/lib/src/client/component_anchors.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ class ClientComponentAnchor extends ComponentAnchor {
4141
: {};
4242

4343
Future<void> resolve() async {
44-
final r = await (Future.value(builder), Future.wait(serverAnchors.values.map((a) => a.resolve()))).wait;
45-
builder = r.$1;
44+
final (clientBuilder, _) = await (
45+
Future.value(builder),
46+
serverAnchors.values.map((a) => a.resolve()).wait,
47+
).wait;
48+
builder = clientBuilder;
4649
}
4750

4851
Component build() {

packages/jaspr/lib/src/client/dom_render_object.dart

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -436,28 +436,22 @@ class DomRenderFragment extends DomRenderObject
436436
}
437437

438438
class RootDomRenderObject extends DomRenderObject with MultiChildDomRenderObject, HydratableDomRenderObject {
439-
RootDomRenderObject(this.node, [List<web.Node>? nodes]) {
440-
toHydrate = [...nodes ?? node.childNodes.toIterable()];
441-
beforeStart = toHydrate.firstOrNull?.previousSibling;
442-
}
443-
444-
factory RootDomRenderObject.between(web.Node start, web.Node end) {
445-
final nodes = <web.Node>[];
446-
web.Node? curr = start.nextSibling;
447-
while (curr != null && curr != end) {
448-
nodes.add(curr);
449-
curr = curr.nextSibling;
450-
}
451-
return RootDomRenderObject(start.parentElement!, nodes);
439+
RootDomRenderObject(this._node) {
440+
toHydrate = [..._node.childNodes.toIterable()];
452441
}
453442

443+
web.Element _node;
454444
@override
455-
web.Element node;
456-
late final web.Node? beforeStart;
445+
web.Element get node => _node;
446+
447+
void setRootNode(web.Element newNode) {
448+
_node = newNode;
449+
toHydrate = [...newNode.childNodes.toIterable()];
450+
}
457451

458452
@override
459453
void attach(DomRenderObject child, {DomRenderObject? after}) {
460-
attachChild(child, after, startNode: beforeStart);
454+
attachChild(child, after);
461455
}
462456

463457
@override

packages/jaspr/lib/src/client/options.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ final class ClientLoader {
7171
/// Use the generated `defaultClientOptions` instead.
7272
typedef ClientBuilder = Component Function(ClientParams params);
7373

74-
class ClientParams {
74+
final class ClientParams {
7575
ClientParams(this._params, this.serverComponents);
7676

77-
final Map<String, dynamic> _params;
77+
final Map<String, Object?> _params;
7878
final Map<String, ServerComponentAnchor> serverComponents;
7979

8080
Component mount(String sId) {
@@ -87,10 +87,16 @@ class ClientParams {
8787
}
8888
}
8989

90+
Component? mountOrNull(String? sId) {
91+
if (sId == null) return null;
92+
return mount(sId);
93+
}
94+
9095
T get<T>(String key) {
91-
if (_params[key] is! T) {
92-
print('$key is not $T: ${_params[key]}');
96+
final value = _params[key];
97+
if (value is! T) {
98+
throw StateError('$key is not $T: $value');
9399
}
94-
return _params[key] as T;
100+
return value;
95101
}
96102
}

packages/jaspr/lib/src/client/run_app.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ import 'client_binding.dart';
44
/// Main entry point for the browser app.
55
ClientAppBinding runApp(Component app, {String attachTo = 'body'}) {
66
final binding = ClientAppBinding();
7-
Future.microtask(() => binding.attachRootComponent(app, attachTo: attachTo));
7+
binding.attachRootComponent(app, attachTo: attachTo);
88
return binding;
99
}

packages/jaspr/lib/src/client/slotted_child_view.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,9 @@ class SlottedChildViewElement extends MultiChildRenderObjectElement {
151151
}
152152

153153
class SlottedDomRenderObject extends DomRenderFragment {
154-
SlottedDomRenderObject._(
155-
DomRenderObject? parent, {
156-
this.firstChildNode,
157-
this.lastChildNode,
158-
}) : super(parent, []);
154+
SlottedDomRenderObject._(DomRenderObject parent, {this.firstChildNode, this.lastChildNode}) : super(parent, []);
159155

160-
factory SlottedDomRenderObject.fromNodes(List<web.Node>? nodes, DomRenderObject? parent) {
156+
factory SlottedDomRenderObject.fromNodes(List<web.Node>? nodes, DomRenderObject parent) {
161157
final nodesToAdd = nodes ?? [if (parent is HydratableDomRenderObject) ...parent.toHydrate];
162158

163159
if (nodesToAdd.isEmpty) {
@@ -175,7 +171,7 @@ class SlottedDomRenderObject extends DomRenderFragment {
175171
parent.toHydrate.removeRange(startIndex, endIndex + 1);
176172
}
177173
}
178-
if (_realNodeOf(parent!).contains(firstNode)) {
174+
if (_realNodeOf(parent).contains(firstNode)) {
179175
object.isAttached = true;
180176
} else {
181177
for (final node in nodesToAdd) {

packages/jaspr/lib/src/components/document/document_server.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import 'dart:async';
33
import 'package:html/dom.dart' as dom;
44
import 'package:html/parser.dart';
55

6-
import '../../server/adapters/document_structure_helper.dart';
76
import '/dom.dart';
87
import '/server.dart';
8+
import '../../server/adapters/document_structure_helper.dart';
99

1010
abstract class Document implements Component {
1111
/// Sets up a basic document structure at the root of your app and renders the main `<html>`, `<head>` and `<body>` tags.
@@ -331,7 +331,7 @@ class AttachAdapter extends RenderAdapter {
331331

332332
@override
333333
void apply(MarkupRenderObject root) {
334-
final (html, head, body) = createDocumentStructure(root);
334+
final (:html, :head, :body) = createDocumentStructure(root);
335335

336336
String? keyFor(MarkupRenderObject n) {
337337
return switch (n) {

0 commit comments

Comments
 (0)