From 3ef1031069cfbc1b56181b17d6d00a963878c099 Mon Sep 17 00:00:00 2001 From: Rafael Santana Date: Thu, 13 Aug 2020 00:39:36 -0300 Subject: [PATCH] fix(chips): support readonly collections in inputs --- .../mdc-chips/chip-default-options.ts | 2 +- src/material-experimental/mdc-chips/chip-input.ts | 15 +++++---------- src/material-experimental/mdc-chips/chip.ts | 2 +- src/material/chips/chip-default-options.ts | 2 +- src/material/chips/chip-input.ts | 15 +++++---------- tools/public_api_guard/material/chips.d.ts | 4 ++-- 6 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/material-experimental/mdc-chips/chip-default-options.ts b/src/material-experimental/mdc-chips/chip-default-options.ts index 4e48aec5cdd5..306b0cb8a9ed 100644 --- a/src/material-experimental/mdc-chips/chip-default-options.ts +++ b/src/material-experimental/mdc-chips/chip-default-options.ts @@ -12,7 +12,7 @@ import {InjectionToken} from '@angular/core'; /** Default options, for the chips module, that can be overridden. */ export interface MatChipsDefaultOptions { /** The list of key codes that will trigger a chipEnd event. */ - separatorKeyCodes: number[] | Set; + separatorKeyCodes: readonly number[] | ReadonlySet; } /** Injection token to be used to override the default options for the chips module. */ diff --git a/src/material-experimental/mdc-chips/chip-input.ts b/src/material-experimental/mdc-chips/chip-input.ts index 0ee7f850fd46..91a37d67a588 100644 --- a/src/material-experimental/mdc-chips/chip-input.ts +++ b/src/material-experimental/mdc-chips/chip-input.ts @@ -7,9 +7,9 @@ */ import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion'; -import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core'; import {hasModifierKey, TAB} from '@angular/cdk/keycodes'; -import {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options'; +import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core'; +import {MatChipsDefaultOptions, MAT_CHIPS_DEFAULT_OPTIONS} from './chip-default-options'; import {MatChipGrid} from './chip-grid'; import {MatChipTextControl} from './chip-text-control'; @@ -74,7 +74,8 @@ export class MatChipInput implements MatChipTextControl, OnChanges { * Defaults to `[ENTER]`. */ @Input('matChipInputSeparatorKeyCodes') - separatorKeyCodes: number[] | Set = this._defaultOptions.separatorKeyCodes; + separatorKeyCodes: readonly number[] | ReadonlySet = + this._defaultOptions.separatorKeyCodes; /** Emitted when a chip is to be added. */ @Output('matChipInputTokenEnd') @@ -163,13 +164,7 @@ export class MatChipInput implements MatChipTextControl, OnChanges { /** Checks whether a keycode is one of the configured separators. */ private _isSeparatorKey(event: KeyboardEvent) { - if (hasModifierKey(event)) { - return false; - } - - const separators = this.separatorKeyCodes; - const keyCode = event.keyCode; - return Array.isArray(separators) ? separators.indexOf(keyCode) > -1 : separators.has(keyCode); + return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode); } static ngAcceptInputType_addOnBlur: BooleanInput; diff --git a/src/material-experimental/mdc-chips/chip.ts b/src/material-experimental/mdc-chips/chip.ts index ce9befd6699a..5aab136a1073 100644 --- a/src/material-experimental/mdc-chips/chip.ts +++ b/src/material-experimental/mdc-chips/chip.ts @@ -137,7 +137,7 @@ export class MatChip extends _MatChipMixinBase implements AfterContentInit, Afte /** Emits when the chip is blurred. */ readonly _onBlur = new Subject(); - readonly REMOVE_ICON_HANDLED_KEYS: Set = new Set([SPACE, ENTER]); + readonly REMOVE_ICON_HANDLED_KEYS: ReadonlySet = new Set([SPACE, ENTER]); /** Whether this chip is a basic (unstyled) chip. */ readonly _isBasicChip: boolean; diff --git a/src/material/chips/chip-default-options.ts b/src/material/chips/chip-default-options.ts index 6d06a0766d8d..cc58dcbb7392 100644 --- a/src/material/chips/chip-default-options.ts +++ b/src/material/chips/chip-default-options.ts @@ -11,7 +11,7 @@ import {InjectionToken} from '@angular/core'; /** Default options, for the chips module, that can be overridden. */ export interface MatChipsDefaultOptions { /** The list of key codes that will trigger a chipEnd event. */ - separatorKeyCodes: number[] | Set; + separatorKeyCodes: readonly number[] | ReadonlySet; } /** Injection token to be used to override the default options for the chips module. */ diff --git a/src/material/chips/chip-input.ts b/src/material/chips/chip-input.ts index be5253b4ae55..ae5ae364d5ee 100644 --- a/src/material/chips/chip-input.ts +++ b/src/material/chips/chip-input.ts @@ -7,9 +7,9 @@ */ import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion'; -import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core'; import {hasModifierKey, TAB} from '@angular/cdk/keycodes'; -import {MAT_CHIPS_DEFAULT_OPTIONS, MatChipsDefaultOptions} from './chip-default-options'; +import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, Output} from '@angular/core'; +import {MatChipsDefaultOptions, MAT_CHIPS_DEFAULT_OPTIONS} from './chip-default-options'; import {MatChipList} from './chip-list'; import {MatChipTextControl} from './chip-text-control'; @@ -74,7 +74,8 @@ export class MatChipInput implements MatChipTextControl, OnChanges { * Defaults to `[ENTER]`. */ @Input('matChipInputSeparatorKeyCodes') - separatorKeyCodes: number[] | Set = this._defaultOptions.separatorKeyCodes; + separatorKeyCodes: readonly number[] | ReadonlySet = + this._defaultOptions.separatorKeyCodes; /** Emitted when a chip is to be added. */ @Output('matChipInputTokenEnd') @@ -163,13 +164,7 @@ export class MatChipInput implements MatChipTextControl, OnChanges { /** Checks whether a keycode is one of the configured separators. */ private _isSeparatorKey(event: KeyboardEvent) { - if (hasModifierKey(event)) { - return false; - } - - const separators = this.separatorKeyCodes; - const keyCode = event.keyCode; - return Array.isArray(separators) ? separators.indexOf(keyCode) > -1 : separators.has(keyCode); + return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode); } static ngAcceptInputType_addOnBlur: BooleanInput; diff --git a/tools/public_api_guard/material/chips.d.ts b/tools/public_api_guard/material/chips.d.ts index 3c3cf8131138..7340b89e5c6e 100644 --- a/tools/public_api_guard/material/chips.d.ts +++ b/tools/public_api_guard/material/chips.d.ts @@ -85,7 +85,7 @@ export declare class MatChipInput implements MatChipTextControl, OnChanges { focused: boolean; id: string; placeholder: string; - separatorKeyCodes: number[] | Set; + separatorKeyCodes: readonly number[] | ReadonlySet; constructor(_elementRef: ElementRef, _defaultOptions: MatChipsDefaultOptions); _blur(): void; _emitChipEnd(event?: KeyboardEvent): void; @@ -200,7 +200,7 @@ export declare class MatChipRemove { } export interface MatChipsDefaultOptions { - separatorKeyCodes: number[] | Set; + separatorKeyCodes: readonly number[] | ReadonlySet; } export declare class MatChipSelectionChange {