import { Tabbing } from ".";
import { ElementsOfFormFactory } from "..";
import { MainStateManager } from "../../../MainStateManager";

interface ITabbing {
    refElement: React.RefObject<HTMLElement>;
    tabIndex?: number;
}

export interface IFocusAbleGridEditFactory {
    mainStateManager: MainStateManager;
    any: any;
    elementsOfForm: ElementsOfFormFactory;
    tabbing: ITabbing;
}

export class GridEditTabbing {

    public focusAbleGridEdit: IFocusAbleGridEditFactory[];

    constructor(
        public tabbing: Tabbing,
    ) {
        this.focusAbleGridEdit = [];
    }

    public focus = () => {
        const find = this.focusAbleGridEdit.find(i => i.tabbing.tabIndex === this.tabbing.activeElementIndex);
        if (find && find.tabbing && find.tabbing.refElement && find.tabbing.refElement.current) {
            find.tabbing.refElement.current.focus();
        }
    }

    public isGridActiveControl = (): boolean => {
        if (this.focusAbleGridEdit && this.focusAbleGridEdit.length > 0) {
            const activeTabIndexs = this.focusAbleGridEdit.map(i => i.tabbing.tabIndex);
            return activeTabIndexs.includes(this.tabbing.activeElementIndex);
        }
        return false;
    }

}