src/select/select.component.ts
ibm-select
provides a styled select
component.
Example:
* <ibm-select [(ngModel)]="model">
* <option value="default" disabled selected hidden>Choose an option</option>
* <option value="option1">Option 1</option>
* <option value="option2">Option 2</option>
* <option value="option3">Option 3</option>
* </ibm-select>
*
providers |
{
provide: NG_VALUE_ACCESSOR, useExisting: Select, multi: true
}
|
selector | ibm-select |
styles |
[data-invalid] ~ .bx--select__arrow {
bottom: 2.25rem;
}
|
template |
|
Properties |
|
Methods |
Inputs |
Outputs |
HostListeners |
Accessors |
disabled
|
Set to true to disable component.
Default value : |
Defined in src/select/select.component.ts:129
|
display
|
Type :
Default value : |
Defined in src/select/select.component.ts:109
|
helperText
|
Optional helper text that appears under the label.
Type : |
Defined in src/select/select.component.ts:117
|
id
|
Sets the unique ID. Defaults to
Default value : |
Defined in src/select/select.component.ts:125
|
invalid
|
Set to
Default value : |
Defined in src/select/select.component.ts:137
|
invalidText
|
Sets the invalid text.
Type : |
Defined in src/select/select.component.ts:121
|
label
|
Label for the select. Appears above the input.
Type : |
Defined in src/select/select.component.ts:113
|
skeleton
|
Set to true for a loading select.
Default value : |
Defined in src/select/select.component.ts:133
|
theme
|
Type :
Default value : |
Defined in src/select/select.component.ts:142
|
selected
|
emits the selected options $event Type: EventEmitter
|
Defined in src/select/select.component.ts:147
|
valueChange
|
$event Type: EventEmitter
|
Defined in src/select/select.component.ts:149
|
blur |
blur()
|
Defined in src/select/select.component.ts:203
|
Listens for the host blurring, and notifies the model |
Public isTemplate | ||||
isTemplate(value)
|
||||
Defined in src/select/select.component.ts:207
|
||||
Parameters :
Returns :
boolean
|
onChange | ||||
onChange(event)
|
||||
Defined in src/select/select.component.ts:193
|
||||
Handles the change event from the
Parameters :
Returns :
void
|
registerOnChange | ||||||
registerOnChange(fn: any)
|
||||||
Defined in src/select/select.component.ts:171
|
||||||
Registers a listener that notifies the model when the control updates
Parameters :
Returns :
void
|
registerOnTouched | ||||||
registerOnTouched(fn: any)
|
||||||
Defined in src/select/select.component.ts:178
|
||||||
Registers a listener that notifies the model when the control is blurred
Parameters :
Returns :
void
|
setDisabledState | ||||||
setDisabledState(isDisabled: boolean)
|
||||||
Defined in src/select/select.component.ts:185
|
||||||
Sets the disabled state through the model
Parameters :
Returns :
void
|
writeValue | ||||||
writeValue(obj: any)
|
||||||
Defined in src/select/select.component.ts:164
|
||||||
Receives a value from the model.
Parameters :
Returns :
void
|
Protected onChangeHandler |
onChangeHandler:
|
Default value : (_: any) => { }
|
Defined in src/select/select.component.ts:214
|
placeholder declarations. Replaced by the functions provided to |
Protected onTouchedHandler |
onTouchedHandler:
|
Default value : () => { }
|
Defined in src/select/select.component.ts:215
|
select |
select:
|
Type : ElementRef
|
Decorators :
@ViewChild('select')
|
Defined in src/select/select.component.ts:151
|
Static selectCount |
selectCount:
|
Type : number
|
Default value : 0
|
Defined in src/select/select.component.ts:104
|
Tracks the total number of selects instantiated. Used to generate unique IDs |
value | ||||
getvalue()
|
||||
Defined in src/select/select.component.ts:153
|
||||
setvalue(v)
|
||||
Defined in src/select/select.component.ts:157
|
||||
Parameters :
Returns :
void
|
import {
Component,
Input,
Output,
ViewChild,
ElementRef,
HostListener,
EventEmitter,
TemplateRef
} from "@angular/core";
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms";
/**
* `ibm-select` provides a styled `select` component.
*
* [See demo](../../?path=/story/select--basic)
*
* Example:
*
* ```
* <ibm-select [(ngModel)]="model">
* <option value="default" disabled selected hidden>Choose an option</option>
* <option value="option1">Option 1</option>
* <option value="option2">Option 2</option>
* <option value="option3">Option 3</option>
* </ibm-select>
* ```
*
* <example-url>../../iframe.html?id=select--basic</example-url>
*/
@Component({
selector: "ibm-select",
template: `
<div class="bx--form-item">
<div
[ngClass]="{
'bx--select--inline': display === 'inline',
'bx--select--light': theme === 'light',
'bx--skeleton': skeleton
}"
class="bx--select"
style="width: 100%">
<label *ngIf="skeleton && label" [for]="id" class="bx--label bx--skeleton"></label>
<label *ngIf="!skeleton && label" [for]="id" class="bx--label">
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
</label>
<div *ngIf="helperText" class="bx--form__helper-text">
<ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container>
<ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template>
</div>
<div class="bx--select-input__wrapper" [attr.data-invalid]="(invalid ? true : null)">
<select
#select
[attr.id]="id"
[disabled]="disabled"
(change)="onChange($event)"
class="bx--select-input">
<ng-content></ng-content>
</select>
<ibm-icon-warning-filled16
*ngIf="!skeleton && invalid"
class="bx--select__invalid-icon"
style="display: inherit;">
</ibm-icon-warning-filled16>
<svg
*ngIf="!skeleton"
focusable="false"
preserveAspectRatio="xMidYMid meet"
style="will-change: transform;"
xmlns="http://www.w3.org/2000/svg"
class="bx--select__arrow"
width="10"
height="6"
viewBox="0 0 10 6"
aria-hidden="true">
<path d="M5 6L0 1 .7.3 5 4.6 9.3.3l.7.7z"></path>
</svg>
</div>
<div *ngIf="invalid" class="bx--form-requirement">
<ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
<ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
</div>
</div>
</div>
`,
styles: [`
[data-invalid] ~ .bx--select__arrow {
bottom: 2.25rem;
}
`],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: Select,
multi: true
}
]
})
export class Select implements ControlValueAccessor {
/**
* Tracks the total number of selects instantiated. Used to generate unique IDs
*/
static selectCount = 0;
/**
* `inline` or `default` select displays
*/
@Input() display: "inline" | "default" = "default";
/**
* Label for the select. Appears above the input.
*/
@Input() label: string | TemplateRef<any>;
/**
* Optional helper text that appears under the label.
*/
@Input() helperText: string | TemplateRef<any>;
/**
* Sets the invalid text.
*/
@Input() invalidText: string | TemplateRef<any>;
/**
* Sets the unique ID. Defaults to `select-${total count of selects instantiated}`
*/
@Input() id = `select-${Select.selectCount++}`;
/**
* Set to true to disable component.
*/
@Input() disabled = false;
/**
* Set to true for a loading select.
*/
@Input() skeleton = false;
/**
* Set to `true` for an invalid select component.
*/
@Input() invalid = false;
/**
* `light` or `dark` select theme
*/
@Input() theme: "light" | "dark" = "dark";
/**
* emits the selected options `value`
* @deprecated use `valueChange` instead
*/
@Output() selected = new EventEmitter();
@Output() valueChange = new EventEmitter();
@ViewChild("select") select: ElementRef;
get value() {
return this.select.nativeElement.value;
}
set value(v) {
this.select.nativeElement.value = v;
}
/**
* Receives a value from the model.
*/
writeValue(obj: any) {
this.value = obj;
}
/**
* Registers a listener that notifies the model when the control updates
*/
registerOnChange(fn: any) {
this.onChangeHandler = fn;
}
/**
* Registers a listener that notifies the model when the control is blurred
*/
registerOnTouched(fn: any) {
this.onTouchedHandler = fn;
}
/**
* Sets the disabled state through the model
*/
setDisabledState(isDisabled: boolean) {
this.disabled = isDisabled;
}
/**
* Handles the change event from the `select`.
* Sends events to the change handler and emits a `selected` event.
*/
onChange(event) {
this.onChangeHandler(event.target.value);
this.selected.emit(event.target.value);
this.valueChange.emit(event.target.value);
}
/**
* Listens for the host blurring, and notifies the model
*/
@HostListener("blur")
blur() {
this.onTouchedHandler();
}
public isTemplate(value) {
return value instanceof TemplateRef;
}
/**
* placeholder declarations. Replaced by the functions provided to `registerOnChange` and `registerOnTouched`
*/
protected onChangeHandler = (_: any) => { };
protected onTouchedHandler = () => { };
}
[data-invalid] ~ .bx--select__arrow {
bottom: 2.25rem;
}