Skip to content
This repository was archived by the owner on May 20, 2023. It is now read-only.

Commit db62376

Browse files
TedSandernshahan
authored andcommitted
Add factoryRenderer pattern to material_auto_suggest, and material_select to allow a path to stop using SlowComponentLoader.
PiperOrigin-RevId: 179505933
1 parent 697bd1a commit db62376

File tree

5 files changed

+39
-5
lines changed

5 files changed

+39
-5
lines changed

lib/material_input/material_auto_suggest_input.dart

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ typedef String _InputChangeCallback(String inputText);
126126
useExisting: MaterialAutoSuggestInputComponent),
127127
const Provider(HasComponentRenderer,
128128
useExisting: MaterialAutoSuggestInputComponent),
129+
const Provider(HasFactoryRenderer,
130+
useExisting: MaterialAutoSuggestInputComponent),
129131
const Provider(Focusable, useExisting: MaterialAutoSuggestInputComponent),
130132
const Provider(PopupSizeProvider,
131133
useExisting: MaterialAutoSuggestInputComponent)
@@ -162,6 +164,7 @@ class MaterialAutoSuggestInputComponent extends MaterialSelectBase
162164
OnDestroy,
163165
HasRenderer,
164166
HasComponentRenderer,
167+
HasFactoryRenderer,
165168
DropdownHandle,
166169
PopupSizeProvider {
167170
/// How to automatically position the dropdown popup by default.
@@ -297,9 +300,15 @@ class MaterialAutoSuggestInputComponent extends MaterialSelectBase
297300
// angular dependency out of models.
298301
@override
299302
@Input()
303+
@Deprecated('Use factoryRenderer instead as it is tree shakeable.')
300304
set componentRenderer(ComponentRenderer value) =>
301305
super.componentRenderer = value;
302306

307+
// [FactoryRenderer] used to display the item.
308+
@override
309+
@Input()
310+
set factoryRenderer(FactoryRenderer value) => super.factoryRenderer = value;
311+
303312
/// Sort the suggestions.
304313
@Deprecated('Caller should call .sort() instead.')
305314
@Input()
@@ -458,10 +467,18 @@ class MaterialAutoSuggestInputComponent extends MaterialSelectBase
458467
bool highlightOptions = true;
459468

460469
@override
461-
ComponentRenderer get componentRenderer =>
462-
highlightOptions && super.componentRenderer == null
463-
? highlightComponentRenderer
464-
: super.componentRenderer;
470+
ComponentRenderer get componentRenderer => highlightOptions &&
471+
super.componentRenderer == null &&
472+
super.factoryRenderer == null
473+
? highlightComponentRenderer
474+
: super.componentRenderer;
475+
476+
@override
477+
FactoryRenderer get factoryRenderer => highlightOptions &&
478+
super.factoryRenderer == null &&
479+
super.componentRenderer == null
480+
? highlightFactoryRenderer
481+
: super.factoryRenderer;
465482

466483
final _showPopupController = new StreamController<bool>.broadcast(sync: true);
467484

lib/material_input/material_auto_suggest_input.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
keyboardOnlyFocusIndicator
114114
[itemRenderer]="itemRenderer"
115115
[componentRenderer]="componentRenderer"
116+
[factoryRenderer]="factoryRenderer"
116117
[selection]="selection"
117118
[disabled]="isOptionDisabled(suggestion)"
118119
[value]="suggestion"

lib/material_select/material_dropdown_select.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,20 @@ class MaterialDropdownSelectComponent extends MaterialSelectBase
227227

228228
@Input()
229229
@override
230+
@Deprecated('Use factoryRenderer it allows for more tree-shakable code.')
230231
set componentRenderer(ComponentRenderer value) {
231232
super.componentRenderer = value;
232233
}
233234

235+
/// Function that returns a component factory to render the Item.
236+
///
237+
/// The resulting component must implement RendersValue.
238+
@Input()
239+
@override
240+
set factoryRenderer(FactoryRenderer value) {
241+
super.factoryRenderer = value;
242+
}
243+
234244
@Input()
235245
@override
236246
set itemRenderer(ItemRenderer value) {

lib/material_select/material_dropdown_select.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
keyboardOnlyFocusIndicator
7979
[itemRenderer]="itemRenderer"
8080
[componentRenderer]="componentRenderer"
81+
[factoryRenderer]="factoryRenderer"
8182
[selection]="selection"
8283
[disabled]="isOptionDisabled(item)"
8384
[value]="item"

lib/mixins/highlight_assistant_mixin.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@
44

55
import 'package:angular/angular.dart';
66
import 'package:angular_components/highlighted_text/highlighted_value.dart';
7+
import 'package:angular_components/highlighted_text/highlighted_value.template.dart'
8+
as highlight;
79
import 'package:angular_components/model/selection/select.dart';
810
import 'package:angular_components/model/selection/selection_container.dart';
9-
import 'package:angular_components/model/ui/has_renderer.dart';
11+
import 'package:angular_components/model/ui/has_factory.dart';
1012
import 'package:angular_components/model/ui/highlight_assistant.dart';
1113
import 'package:angular_components/model/ui/highlight_provider.dart';
1214
import 'package:angular_components/model/ui/highlighted_text_model.dart';
1315

1416
/// Assistant to support highlighting in a SelectionContainer.
1517
abstract class HighlightAssistantMixin
1618
implements SelectionContainer, HighlightProvider {
19+
@Deprecated('Use highlightFactoryRenderer instead as it allows tree-shaking.')
1720
final ComponentRenderer highlightComponentRenderer =
1821
(_) => HighlightedValueComponent;
22+
final FactoryRenderer highlightFactoryRenderer =
23+
(_) => highlight.HighlightedValueComponentNgFactory;
1924

2025
HighlightAssistant _highlightAssistant;
2126

0 commit comments

Comments
 (0)