diff --git a/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.css b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.css new file mode 100644 index 000000000000..08fa67536b1f --- /dev/null +++ b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.css @@ -0,0 +1,9 @@ +.example-form { + min-width: 150px; + max-width: 500px; + width: 100%; +} + +.example-full-width { + width: 100%; +} diff --git a/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.html b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.html new file mode 100644 index 000000000000..6b428b0b45c9 --- /dev/null +++ b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.html @@ -0,0 +1,18 @@ +
+ + Number + + + + {{option}} + + + +
+ +Control value: {{myControl.value}} diff --git a/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.ts b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.ts new file mode 100644 index 000000000000..a93619ae3748 --- /dev/null +++ b/src/components-examples/material/autocomplete/autocomplete-require-selection/autocomplete-require-selection-example.ts @@ -0,0 +1,45 @@ +import {Component, OnInit} from '@angular/core'; +import {FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {Observable} from 'rxjs'; +import {map, startWith} from 'rxjs/operators'; +import {NgFor, AsyncPipe} from '@angular/common'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatInputModule} from '@angular/material/input'; +import {MatFormFieldModule} from '@angular/material/form-field'; + +/** + * @title Require an autocomplete option to be selected. + */ +@Component({ + selector: 'autocomplete-require-selection-example', + templateUrl: 'autocomplete-require-selection-example.html', + styleUrls: ['autocomplete-require-selection-example.css'], + standalone: true, + imports: [ + FormsModule, + MatFormFieldModule, + MatInputModule, + MatAutocompleteModule, + ReactiveFormsModule, + NgFor, + AsyncPipe, + ], +}) +export class AutocompleteRequireSelectionExample implements OnInit { + myControl = new FormControl(''); + options: string[] = ['One', 'Two', 'Three', 'Three', 'Four']; + filteredOptions: Observable; + + ngOnInit() { + this.filteredOptions = this.myControl.valueChanges.pipe( + startWith(''), + map(value => this._filter(value || '')), + ); + } + + private _filter(value: string): string[] { + const filterValue = value.toLowerCase(); + + return this.options.filter(option => option.toLowerCase().includes(filterValue)); + } +} diff --git a/src/components-examples/material/autocomplete/index.ts b/src/components-examples/material/autocomplete/index.ts index 252c88070069..18aad314a477 100644 --- a/src/components-examples/material/autocomplete/index.ts +++ b/src/components-examples/material/autocomplete/index.ts @@ -5,4 +5,5 @@ export {AutocompleteOptgroupExample} from './autocomplete-optgroup/autocomplete- export {AutocompleteOverviewExample} from './autocomplete-overview/autocomplete-overview-example'; export {AutocompletePlainInputExample} from './autocomplete-plain-input/autocomplete-plain-input-example'; export {AutocompleteSimpleExample} from './autocomplete-simple/autocomplete-simple-example'; +export {AutocompleteRequireSelectionExample} from './autocomplete-require-selection/autocomplete-require-selection-example'; export {AutocompleteHarnessExample} from './autocomplete-harness/autocomplete-harness-example'; diff --git a/src/dev-app/autocomplete/autocomplete-demo.html b/src/dev-app/autocomplete/autocomplete-demo.html index 2502c1584c65..e2d04e637bd8 100644 --- a/src/dev-app/autocomplete/autocomplete-demo.html +++ b/src/dev-app/autocomplete/autocomplete-demo.html @@ -10,9 +10,11 @@ State - + [autoActiveFirstOption]="reactiveAutoActiveFirstOption" + [requireSelection]="reactiveRequireSelection"> {{ state.name }} @@ -45,6 +47,11 @@ Automatically activate first option

+

+ + Require Selection + +

@@ -60,7 +67,8 @@ (ngModelChange)="tdStates = filterStates(currentState)" [disabled]="tdDisabled"> + [autoActiveFirstOption]="templateAutoActiveFirstOption" + [requireSelection]="templateRequireSelection"> {{ state.name }} @@ -89,6 +97,11 @@ Automatically activate first option

+

+ + Require Selection + +