feat(searchbar): ionChange will only emit from user committed changes (#26026)

This commit is contained in:
Amanda Johnston
2022-10-03 15:08:43 -05:00
committed by GitHub
parent 4cb32b6c6b
commit b052d3b262
17 changed files with 302 additions and 70 deletions

View File

@@ -0,0 +1,18 @@
describe('Searchbar', () => {
beforeEach(() => cy.visit('/searchbar'));
it('should become valid', () => {
cy.get('#status').should('have.text', 'INVALID');
cy.get('ion-searchbar').type('hello');
cy.get('#status').should('have.text', 'VALID');
});
it('should update the form control value when typing', () => {
cy.get('#value').contains(`"searchbar": ""`);
cy.get('ion-searchbar').type('hello');
cy.get('#value').contains(`"searchbar": "hello"`);
});
});

View File

@@ -26,6 +26,7 @@ const routes: Routes = [
{ path: 'alerts', component: AlertComponent },
{ path: 'inputs', component: InputsComponent },
{ path: 'textarea', loadChildren: () => import('./textarea/textarea.module').then(m => m.TextareaModule) },
{ path: 'searchbar', loadChildren: () => import('./searchbar/searchbar.module').then(m => m.SearchbarModule) },
{ path: 'form', component: FormComponent },
{ path: 'modals', component: ModalComponent },
{ path: 'modal-inline', loadChildren: () => import('./modal-inline').then(m => m.ModalInlineModule) },

View File

@@ -0,0 +1,16 @@
import { NgModule } from "@angular/core";
import { RouterModule } from "@angular/router";
import { SearchbarComponent } from "./searchbar.component";
@NgModule({
imports: [
RouterModule.forChild([
{
path: '',
component: SearchbarComponent
}
])
],
exports: [RouterModule]
})
export class SearchbarRoutingModule { }

View File

@@ -0,0 +1,16 @@
<ion-content>
<form [formGroup]="form">
<ion-list>
<ion-item>
<ion-label>Searchbar</ion-label>
<ion-searchbar formControlName="searchbar"></ion-searchbar>
</ion-item>
</ion-list>
</form>
<p>
Form status: <span id="status">{{ form.status }}</span>
</p>
<p>
Form value: <span id="value">{{ form.value | json }}</span>
</p>
</ion-content>

View File

@@ -0,0 +1,16 @@
import { Component } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
@Component({
selector: 'app-searchbar',
templateUrl: 'searchbar.component.html',
})
export class SearchbarComponent {
form = this.fb.group({
searchbar: ['', Validators.required]
})
constructor(private fb: FormBuilder) { }
}

View File

@@ -0,0 +1,21 @@
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { IonicModule } from "@ionic/angular";
import { SearchbarRoutingModule } from "./searchbar-routing.module";
import { SearchbarComponent } from "./searchbar.component";
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
IonicModule,
SearchbarRoutingModule
],
declarations: [
SearchbarComponent
]
})
export class SearchbarModule { }