Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 1x 74x 74x 74x 6x 4x 1x 1x 1x 3x 3x 2x 2x 2x 2x | import { Inject, Injectable, Optional } from '@angular/core';
import { DynamicFormElement } from '../dynamic-form-element/dynamic-form-element';
import { DynamicFormField } from '../dynamic-form-field/dynamic-form-field';
import { DynamicFormLibraryService } from '../dynamic-form-library/dynamic-form-library.service';
import { DynamicFormAction } from './dynamic-form-action';
import { DynamicFormActionHandler } from './dynamic-form-action-handler';
import { DynamicFormActionHandlerConfig, DYNAMIC_FORM_ACTION_HANDLER_CONFIG } from './dynamic-form-action-handler-config';
@Injectable()
export class DynamicFormActionService {
readonly handlers: DynamicFormActionHandler[];
constructor(
private readonly libraryService: DynamicFormLibraryService,
@Optional() @Inject(DYNAMIC_FORM_ACTION_HANDLER_CONFIG)
private handlerConfig: DynamicFormActionHandlerConfig,
) {
this.handlers = this.libraryService.filterTypes(this.handlerConfig);
}
getHandler(type: string): DynamicFormActionHandler {
return this.handlers.find(f => f.type === type);
}
handle(action: DynamicFormAction, $event: Event): void {
if (typeof action.template.action === 'function') {
action.template.action();
$event.stopPropagation();
return;
}
const handler = this.getHandler(action.template.action);
if (handler) {
const element = this.getElement(handler, action);
handler.func(element, action);
$event.stopPropagation();
}
}
private getElement(handler: DynamicFormActionHandler, action: DynamicFormAction): DynamicFormElement | DynamicFormField {
return handler.elementFunc
? handler.elementFunc(action)
: action.parent;
}
}
|