Search code examples
vmware-clarity

clr validate icon not getting triggered in invalid input and error message always displaying


How do I set clr-error when the input is invalid. I've set the input field to be required.

But on page load the clr-control-error message always shows and the exclamation-circle never shows even when i click into input and click away

<form class="clr-form clr-form-horizontal">
  <div class="clr-form-control clr-row">
    <div class="clr-control-container clr-col-4">
      <div class="clr-input-wrapper">
        <clr-icon shape="search"></clr-icon>
        <input type="text" id="search" class="clr-input" [(ngModel)]="model" name="search" required/>
        <clr-icon class="clr-validate-icon" shape="exclamation-circle"></clr-icon>
        <clr-control-error>Search Input is required</clr-control-error>
      </div>
    </div>
  </div>
</form>

Solution

  • what you've got is the HTML/CSS version of form controls, which don't have built in validation. We've not yet created an input-group functionality that also works with Angular, so you'll have to manually toggle the display of the error message. You can see a few demos of this here: https://github.com/vmware/clarity/blob/master/src/dev/src/app/forms/input-group/input-group.html

    Here is a demo based on your example of something that works with our markup, but currently requires some manual effort on your end. Eventually this will be supported in an Angular component, but not at the moment.

    https://stackblitz.com/edit/clarity-light-theme-v1-0-xfaw9m?file=src/app/app.component.html

    <form class="clr-form clr-form-horizontal">
      <div class="clr-form-control clr-row">
        <div class="clr-control-container clr-col-6" [class.clr-error]="search.invalid && search.touched">
          <div class="clr-input-wrapper">
            <div class="clr-input-group">
              <clr-icon class="" shape="search"></clr-icon>
              <input type="text" id="search" class="clr-input" [(ngModel)]="model" name="search" required #search="ngModel" />
            </div>
            <clr-icon class="clr-validate-icon" shape="exclamation-circle"></clr-icon>
            <div class="clr-subtext" *ngIf="search.invalid && search.touched">Search Input is required</div>
          </div>
        </div>
      </div>
    </form>