UNPKG

armisa-models

Version:
72 lines (61 loc) 2.63 kB
import { ElementsOfFormFactory } from ".."; import { ElementTabbing, IFocusAbleElementFactory } from "./ElementTabbing"; import { GridEditTabbing } from "./GridEditTabbing"; import { ToolboxTabbing } from "./ToolTipTabbing"; export class Tabbing { public toolBoxTabIndex: number = -1; private _activeElementIndex: number = 0; public get activeElementIndex() { return this._activeElementIndex; } public set activeElementIndex(value: number) { this._activeElementIndex = value; } public elementTabbing: ElementTabbing; public toolboxTabbing: ToolboxTabbing; public gridEditTabbing: GridEditTabbing; constructor( public elementsOfFormFactory: ElementsOfFormFactory ) { this.elementTabbing = new ElementTabbing(this); this.toolboxTabbing = new ToolboxTabbing(this); this.gridEditTabbing = new GridEditTabbing(this); } userClickOnElement = (element: EventTarget) => { const focusAbleElement = this.elementTabbing.isThereAnyElement(element); if (focusAbleElement && typeof focusAbleElement.tabIndex === 'number' && focusAbleElement.element) { this.elementTabbing.setFocus(focusAbleElement); } else { this.elementTabbing.focusToZeroTabIndexOrFirstElementOrToolbox(); } } ///it lock at active element index and try to give it focus public focus = () => { if (this.toolboxTabbing.isEmpty() && this.elementTabbing.isEmpty()) { this.elementsOfFormFactory.mainStateManager.authFactory.searchBoxRef?.current?.focus(); return; } if (this.activeElementIndex === -1) { this.toolboxTabbing.focus(true); } else if (this.gridEditTabbing.isGridActiveControl()) { this.gridEditTabbing.focus(); } else { this.elementTabbing.focus(); } } // public focusElementOfForm: { // (tabIndex: number): void; // (element: IFocusAbleElementFactory): void; // (element: HTMLElement): void; // } = (param: IFocusAbleElementFactory | number | HTMLElement) => { // if (typeof param === 'number') { // this.elementTabbing.focusToElementByTabIndex(param); // } else if (typeof param === 'object') { // if ('element' in param) { // this.elementTabbing.focusToElementByFactory(param); // } else { // this.elementTabbing.focusToElementByHTMLElement(param); // } // } // } }