Skip to content
Snippets Groups Projects
Commit 0a17c1af authored by jojohoch's avatar jojohoch
Browse files

[player] Refactor element overlay component

Break up the code into smaller methods
parent ec86231c
No related branches found
No related tags found
No related merge requests found
...@@ -2,12 +2,11 @@ import { ...@@ -2,12 +2,11 @@ import {
Component, OnInit, Input, ComponentFactoryResolver, Component, OnInit, Input, ComponentFactoryResolver,
ViewChild, ViewContainerRef ViewChild, ViewContainerRef
} from '@angular/core'; } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { takeUntil } from 'rxjs/operators'; import { takeUntil } from 'rxjs/operators';
import { Subject, Subscription } from 'rxjs'; import { Subject, Subscription } from 'rxjs';
import { UnitUIElement } from '../../../../../common/unit'; import { UnitUIElement } from '../../../../../common/unit';
import * as ComponentUtils from '../../../../../common/component-utils'; import * as ComponentUtils from '../../../../../common/component-utils';
import { FormService } from '../../../../../common/form.service';
import { SpecialCharacterService } from '../../services/special-character.service'; import { SpecialCharacterService } from '../../services/special-character.service';
import { TextFieldComponent } from '../../../../../common/element-components/text-field.component'; import { TextFieldComponent } from '../../../../../common/element-components/text-field.component';
import { TextAreaComponent } from '../../../../../common/element-components/text-area.component'; import { TextAreaComponent } from '../../../../../common/element-components/text-area.component';
...@@ -29,9 +28,7 @@ export class ElementOverlayComponent implements OnInit { ...@@ -29,9 +28,7 @@ export class ElementOverlayComponent implements OnInit {
@ViewChild('elementComponentContainer', @ViewChild('elementComponentContainer',
{ read: ViewContainerRef, static: true }) private elementComponentContainer!: ViewContainerRef; { read: ViewContainerRef, static: true }) private elementComponentContainer!: ViewContainerRef;
constructor(private formService: FormService, constructor(private specialCharacterService: SpecialCharacterService,
private specialCharacterService: SpecialCharacterService,
private formBuilder: FormBuilder,
private componentFactoryResolver: ComponentFactoryResolver) { private componentFactoryResolver: ComponentFactoryResolver) {
} }
...@@ -60,29 +57,41 @@ export class ElementOverlayComponent implements OnInit { ...@@ -60,29 +57,41 @@ export class ElementOverlayComponent implements OnInit {
elementComponent.onFocus elementComponent.onFocus
.pipe(takeUntil(this.ngUnsubscribe)) .pipe(takeUntil(this.ngUnsubscribe))
.subscribe((focussedInputControl: HTMLElement): void => { .subscribe((focussedInputControl: HTMLElement): void => {
this.specialCharacterService.openKeyboard(); this.openKeyboard(focussedInputControl);
this.focussedInputSubscription = this.specialCharacterService.characterInput
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((character: string): void => {
const inputElement = focussedInputControl as HTMLInputElement;
const selectionStart = inputElement.selectionStart || 0;
const selectionEnd = inputElement.selectionEnd || inputElement.value.length;
const startText = inputElement.value.substring(0, selectionStart);
const endText = inputElement.value.substring(selectionEnd);
inputElement.value = startText + character + endText;
const selection = selectionStart ? selectionStart + 1 : 1;
inputElement.setSelectionRange(selection, selection);
});
}); });
elementComponent.onBlur elementComponent.onBlur
.pipe(takeUntil(this.ngUnsubscribe)) .pipe(takeUntil(this.ngUnsubscribe))
.subscribe((): void => { .subscribe((): void => {
this.specialCharacterService.closeKeyboard(); this.closeKeyboard();
this.focussedInputSubscription.unsubscribe();
}); });
} }
private closeKeyboard(): void {
this.specialCharacterService.closeKeyboard();
this.focussedInputSubscription.unsubscribe();
}
private openKeyboard(focussedInputControl: HTMLElement): void {
this.specialCharacterService.openKeyboard();
this.focussedInputSubscription = this.specialCharacterService.characterInput
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((character: string): void => {
this.onKeyboardInput(character, focussedInputControl);
});
}
private onKeyboardInput = (character: string, focussedInputControl: HTMLElement): void => {
const inputElement = focussedInputControl as HTMLInputElement;
const selectionStart = inputElement.selectionStart || 0;
const selectionEnd = inputElement.selectionEnd || inputElement.value.length;
const startText = inputElement.value.substring(0, selectionStart);
const endText = inputElement.value.substring(selectionEnd);
inputElement.value = startText + character + endText;
const selection = selectionStart ? selectionStart + 1 : 1;
inputElement.setSelectionRange(selection, selection);
};
ngOnDestroy(): void { ngOnDestroy(): void {
this.ngUnsubscribe.next(); this.ngUnsubscribe.next();
this.ngUnsubscribe.complete(); this.ngUnsubscribe.complete();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment