Skip to content

Commit e34ba8d

Browse files
committed
Review changes
1 parent bd8bdab commit e34ba8d

File tree

4 files changed

+56
-62
lines changed

4 files changed

+56
-62
lines changed

packages/spikes/gulf_client/lib/src/core/interpreter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class GulfInterpreter with ChangeNotifier {
4242
if (jsonl.isEmpty) {
4343
return;
4444
}
45-
final json = jsonDecode(jsonl);
45+
final json = jsonDecode(jsonl) as Map<String, Object?>;
4646
final message = GulfStreamMessage.fromJson(json);
4747
switch (message) {
4848
case StreamHeader():

packages/spikes/gulf_client/lib/src/widgets/gulf_view.dart

Lines changed: 38 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -169,60 +169,54 @@ class _LayoutEngine extends StatelessWidget {
169169
return builder(context, component, {}, {'children': children});
170170
}
171171

172+
Object? _resolveValue(Value? value, Map<String, dynamic>? itemData) {
173+
if (value == null) {
174+
return null;
175+
}
176+
if (value.literalString != null) {
177+
return value.literalString;
178+
} else if (value.literalNumber != null) {
179+
return value.literalNumber;
180+
} else if (value.literalBoolean != null) {
181+
return value.literalBoolean;
182+
} else if (value.literalObject != null) {
183+
return value.literalObject;
184+
} else if (value.literalArray != null) {
185+
return value.literalArray;
186+
} else if (value.path != null) {
187+
if (itemData != null) {
188+
return itemData[value.path!.substring(1)];
189+
} else {
190+
return interpreter.resolveDataBinding(value.path!);
191+
}
192+
}
193+
return null;
194+
}
195+
172196
Map<String, Object?> _resolveProperties(
173197
Component component,
174198
Map<String, dynamic>? itemData,
175199
) {
176200
final properties = <String, Object?>{};
201+
final componentJson = component.toJson();
202+
203+
for (final entry in componentJson.entries) {
204+
final key = entry.key;
205+
final value = entry.value;
177206

178-
void resolveValue(String key, Value? value) {
179207
if (value == null) {
180-
return;
208+
continue;
181209
}
182-
if (value.literalString != null) {
183-
properties[key] = value.literalString;
184-
} else if (value.literalNumber != null) {
185-
properties[key] = value.literalNumber;
186-
} else if (value.literalBoolean != null) {
187-
properties[key] = value.literalBoolean;
188-
} else if (value.literalObject != null) {
189-
properties[key] = value.literalObject;
190-
} else if (value.literalArray != null) {
191-
properties[key] = value.literalArray;
192-
} else if (value.path != null) {
193-
if (itemData != null) {
194-
properties[key] = itemData[value.path!.substring(1)];
195-
} else {
196-
properties[key] = interpreter.resolveDataBinding(value.path!);
197-
}
210+
211+
if (key == 'value') {
212+
properties['text'] = _resolveValue(
213+
Value.fromJson(value as Map<String, dynamic>),
214+
itemData,
215+
);
216+
} else {
217+
properties[key] = value;
198218
}
199219
}
200-
201-
resolveValue('text', component.value);
202-
properties['level'] = component.level;
203-
properties['description'] = component.description;
204-
properties['direction'] = component.direction;
205-
properties['distribution'] = component.distribution;
206-
properties['alignment'] = component.alignment;
207-
properties['child'] = component.child;
208-
properties['tabItems'] = component.tabItems;
209-
properties['axis'] = component.axis;
210-
properties['color'] = component.color;
211-
properties['thickness'] = component.thickness;
212-
properties['entryPointChild'] = component.entryPointChild;
213-
properties['contentChild'] = component.contentChild;
214-
properties['label'] = component.label;
215-
properties['action'] = component.action;
216-
properties['textFieldType'] = component.textFieldType;
217-
properties['validationRegexp'] = component.validationRegexp;
218-
properties['enableDate'] = component.enableDate;
219-
properties['enableTime'] = component.enableTime;
220-
properties['outputFormat'] = component.outputFormat;
221-
properties['options'] = component.options;
222-
properties['maxAllowedSelections'] = component.maxAllowedSelections;
223-
properties['min_value'] = component.minValue;
224-
properties['max_value'] = component.maxValue;
225-
226220
return properties;
227221
}
228222
}

packages/spikes/gulf_client/test/widgets/list_view_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ void main() {
4242
'{"messageType": "ComponentUpdate", "components": [{"id": "template", "type": "Text", "value": {"path": "/text"}}]}',
4343
);
4444
streamController.add(
45-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"items": "items_node"}}, {"id": "items_node", "items": ["item1", "item2"]}]}',
45+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"items": "items_node"}}, {"id": "items_node", "items": ["item1", "item2"]}]}''',
4646
);
4747
streamController.add(
48-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "item1", "children": {"text": "text1"}}, {"id": "text1", "value": "Item 1"}]}',
48+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "item1", "children": {"text": "text1"}}, {"id": "text1", "value": "Item 1"}]}''',
4949
);
5050
streamController.add(
51-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "item2", "children": {"text": "text2"}}, {"id": "text2", "value": "Item 2"}]}',
51+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "item2", "children": {"text": "text2"}}, {"id": "text2", "value": "Item 2"}]}''',
5252
);
5353
streamController.add(
54-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
54+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
5555
);
5656
await tester.pump();
5757

@@ -77,10 +77,10 @@ void main() {
7777
'{"messageType": "ComponentUpdate", "components": [{"id": "template", "type": "Text", "value": {"path": "/text"}}]}',
7878
);
7979
streamController.add(
80-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"items": "items_node"}}, {"id": "items_node", "value": "not a list"}]}',
80+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"items": "items_node"}}, {"id": "items_node", "value": "not a list"}]}''',
8181
);
8282
streamController.add(
83-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
83+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
8484
);
8585
await tester.pump();
8686

packages/spikes/gulf_client/test/widgets/simple_gsp_view_test.dart

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ void main() {
4343
);
4444

4545
streamController.add(
46-
'{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Text", "value": {"literalString": "Hello"}}]}',
46+
'''{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Text", "value": {"literalString": "Hello"}}]}''',
4747
);
4848
streamController.add(
49-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
49+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
5050
);
5151
await tester.pump();
5252

@@ -61,10 +61,10 @@ void main() {
6161
);
6262

6363
streamController.add(
64-
'{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Column", "children": {"explicitList": ["root"]}}]}',
64+
'''{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Column", "children": {"explicitList": ["root"]}}]}''',
6565
);
6666
streamController.add(
67-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
67+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
6868
);
6969
await tester.pump();
7070

@@ -82,10 +82,10 @@ void main() {
8282
);
8383

8484
streamController.add(
85-
'{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "MissingWidget"}]}',
85+
'''{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "MissingWidget"}]}''',
8686
);
8787
streamController.add(
88-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
88+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
8989
);
9090
await tester.pump();
9191

@@ -103,7 +103,7 @@ void main() {
103103
);
104104

105105
streamController.add(
106-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
106+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
107107
);
108108
await tester.pump();
109109

@@ -118,20 +118,20 @@ void main() {
118118
);
119119

120120
streamController.add(
121-
'{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Text", "value": {"path": "/greeting"}}]}',
121+
'''{"messageType": "ComponentUpdate", "components": [{"id": "root", "type": "Text", "value": {"path": "/greeting"}}]}''',
122122
);
123123
streamController.add(
124-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"greeting": "greeting_node"}}, {"id": "greeting_node", "value": "Initial"}]}',
124+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "data_root", "children": {"greeting": "greeting_node"}}, {"id": "greeting_node", "value": "Initial"}]}''',
125125
);
126126
streamController.add(
127-
'{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}',
127+
'''{"messageType": "UIRoot", "root": "root", "dataModelRoot": "data_root"}''',
128128
);
129129
await tester.pump();
130130

131131
expect(find.text('Initial'), findsOneWidget);
132132

133133
streamController.add(
134-
'{"messageType": "DataModelUpdate", "nodes": [{"id": "greeting_node", "value": "Updated"}]}',
134+
'''{"messageType": "DataModelUpdate", "nodes": [{"id": "greeting_node", "value": "Updated"}]}''',
135135
);
136136
await tester.pump();
137137

0 commit comments

Comments
 (0)