armisa-models
Version:
models of armisa!
72 lines (61 loc) • 2.63 kB
text/typescript
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);
// }
// }
// }
}