UNPKG

8.16 kBSource Map (JSON)View Raw
1{"version":3,"file":"button-radio-group.directive.js","sourceRoot":"","sources":["../../../../src/buttons/button-radio-group.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n forwardRef,\n HostBinding,\n HostListener,\n Provider,\n QueryList\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ButtonRadioDirective } from './button-radio.directive';\n\nexport const RADIO_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ButtonRadioGroupDirective),\n multi: true\n};\n\n/**\n * A group of radio buttons.\n * A value of a selected button is bound to a variable specified via ngModel.\n */\n@Directive({\n selector: '[btnRadioGroup]',\n providers: [RADIO_CONTROL_VALUE_ACCESSOR]\n})\nexport class ButtonRadioGroupDirective implements ControlValueAccessor {\n onChange = Function.prototype;\n onTouched = Function.prototype;\n\n @HostBinding('attr.role') readonly role: string = 'radiogroup';\n\n @ContentChildren(forwardRef(() => ButtonRadioDirective))\n radioButtons?: QueryList<ButtonRadioDirective>;\n\n constructor(private cdr: ChangeDetectorRef) {\n }\n\n private _value?: string;\n\n get value() {\n return this._value;\n }\n\n set value(value: string | undefined) {\n this._value = value;\n this.onChange(value);\n }\n\n private _disabled = false;\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @HostBinding('attr.tabindex')\n get tabindex(): null | number {\n if (this._disabled) {\n return null;\n } else {\n return 0;\n }\n }\n\n writeValue(value?: string): void {\n this._value = value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n if (this.radioButtons) {\n this._disabled = disabled;\n this.radioButtons.forEach(buttons => {\n buttons.setDisabledState(disabled);\n });\n this.cdr.markForCheck();\n }\n }\n\n @HostListener('focus')\n onFocus() {\n if (this._disabled) {\n return;\n }\n const activeRadio = this.getActiveOrFocusedRadio();\n if (activeRadio) {\n activeRadio.focus();\n return;\n }\n\n if (this.radioButtons) {\n const firstEnabled = this.radioButtons.find(r => !r.disabled);\n if (firstEnabled) {\n firstEnabled.focus();\n }\n }\n }\n\n @HostListener('blur')\n onBlur() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n @HostListener('keydown.ArrowRight', ['$event'])\n @HostListener('keydown.ArrowDown', ['$event'])\n selectNext(event: KeyboardEvent) {\n this.selectInDirection('next');\n event.preventDefault();\n }\n\n @HostListener('keydown.ArrowLeft', ['$event'])\n @HostListener('keydown.ArrowUp', ['$event'])\n selectPrevious(event: KeyboardEvent) {\n this.selectInDirection('previous');\n event.preventDefault();\n }\n\n private selectInDirection(direction: 'next' | 'previous') {\n if (this._disabled) {\n return;\n }\n\n function nextIndex(currentIndex: number, buttonRadioDirectives: ButtonRadioDirective[]) {\n const step = direction === 'next' ? 1 : -1;\n let calcIndex = (currentIndex + step) % buttonRadioDirectives.length;\n if (calcIndex < 0) {\n calcIndex = buttonRadioDirectives.length - 1;\n }\n\n return calcIndex;\n }\n\n const activeRadio = this.getActiveOrFocusedRadio();\n\n if (activeRadio && this.radioButtons) {\n const buttonRadioDirectives = this.radioButtons.toArray();\n const currentActiveIndex = buttonRadioDirectives.indexOf(activeRadio);\n for (\n let i = nextIndex(currentActiveIndex, buttonRadioDirectives);\n i !== currentActiveIndex;\n i = nextIndex(i, buttonRadioDirectives)\n ) {\n if (buttonRadioDirectives[i].canToggle()) {\n buttonRadioDirectives[i].toggleIfAllowed();\n buttonRadioDirectives[i].focus();\n break;\n }\n }\n }\n }\n\n private getActiveOrFocusedRadio(): ButtonRadioDirective | undefined {\n if (!this.radioButtons) {\n return void 0;\n }\n\n return this.radioButtons.find(button => button.isActive)\n || this.radioButtons.find(button => button.hasFocus);\n }\n}\n"]}
\No newline at end of file