import { AfterViewInit, EventEmitter, OnDestroy, QueryList, TemplateRef } from '@angular/core';
import { TccContextMenuServiceNamespace } from '../../../shared/services/tcc-context-menu/tcc-context-menu.service';
import { Observable } from 'rxjs';
import { tccFilterbar, TccFilterbarComponent } from '../tcc-filterbar/tcc-filterbar.component';
import { TccTable, TccTableComponent } from '../tcc-table/tcc-table.component';
import { TccSliderRightComponent } from '../../../shared/components/tcc-slider-right/tcc-slider-right.component';
import { tccDialogWindow } from '../tcc-dialog-window/tcc-dialog-window.component';
import { TccInfinityScroll, TccInfinityScrollComponent } from '../../../shared/components/tcc-infinity-scroll/tcc-infinity-scroll.component';
import { TccPagedDataManager, TccPagedDataManagerNamespace } from '../../../shared/classes/TccPagedDataManager';
import { TccODataServiceFactory } from '../../../odata/factories/tcc-odata-service/tcc-odata-service.factory';
import { TccPagedDataManagerService } from '../../../shared/services/tcc-paged-data-manager/tcc-paged-data-manager.service';
import { TccDialogWindowService } from '../../services/tcc-dialog-window/tcc-dialog-window.service';
import { TccSnackBarService } from '../../services/tcc-snackbar/tcc-snackbar.service';
import { TccInputMask } from '../../../shared/models/inputMask.model';
import { TccTutorialTooltip } from '../tcc-tutorial-tooltip/tcc-tutorial-tooltip.component';
import { TccIcon } from '../../../odata/models/shared.model';
import { TccStandardSliderDetailsViewComponent } from '../tcc-standard-slider-details-view/tcc-standard-slider-details-view.component';
import { TccInputMaskComponent } from '../../../shared/components/tcc-input-mask/tcc-input-mask.component';
import { MatTabChangeEvent } from '@angular/material/tabs';
import { PageEvent } from '@angular/material/paginator';
import { tccFilter } from '../tcc-filter/tcc-filter.component';
import { TccKeypressService } from '../../services/tcc-keypress/tcc-keypress.service';
import { TccUserPropertyService } from '../../../shared/services/tcc-user-property/tcc-user-property.service';
import { TccChooseProfileThumbnail } from '../tcc-choose-profile-thumbnail/tcc-choose-profile-thumbnail.component';
import { MatDialog } from '@angular/material/dialog';
import { InputMaskHTMLElement } from '../../../shared/components/tcc-input-mask/directives/input-mask-htmlelement';
import { SpecialColDirective } from '../tcc-table/directives/special-col.directive';
import { TccSectionNavigationButtonConfig } from '../../../shared/components/tcc-section-navigation/tcc-section-navigation.component';
export declare namespace TccStandardTableView {
    enum userServiceColumnDefPropertyName {
        columnDef = "columnDef"
    }
    interface options<T> {
        tableInput: TccTable.TableInputs<T>;
        entityName?: TccStandardTableView.entityName;
        entityPath?: string;
        iconPath?: string[];
        nestedEntity?: {
            path: string;
            id: string;
        };
        searchFields?: string[];
        useSliderDetailsView?: boolean;
        useSliderStandardDetailsView?: boolean;
        standardDetailsInputElements?: TccInputMask.SectionElements;
        standardDetailsProfileOptions?: TccChooseProfileThumbnail.Options;
        standardDetailsTitle?: string;
        createEntityCallback?: (result: tccDialogWindow.TccInputDialogReturn, newEntity: T) => T;
        createEntityOptions?: TccStandardTableView.createEntityOptions;
        noContentSettings?: tccFilterbar.noContentSettings;
        hideSaveButton?: boolean;
        hideDeleteButton?: boolean;
        multiSave?: boolean;
        setValueChangesFunction?: (Entity: T, Changes: TccInputMask.valueChanges) => void;
        useStandardCreate?: boolean;
        filterOptions?: tccFilter.FilterInputOptions;
        permanentFilter?: string;
        deleteGetNameFunction?: (T: any) => string;
        deleteForbiddenFunction?: (T: any) => string;
        primaryButton?: string;
        primaryButtonIcon?: string;
        orderBy?: string;
        disableChangableColumns?: boolean;
        generateChangableColumnsFunction?: () => tccFilterbar.settings;
        disableChooseProfile?: boolean;
        disabledTableColumns?: string[];
        basePath?: string;
        useSelectForTable?: boolean;
        addSelectsForTable?: string[][];
        sliderConfig?: TccSectionNavigationButtonConfig;
    }
    interface entityName {
        singular: string;
        plural: string;
    }
    interface createEntityOptions {
        extraInputs?: TccInputMask.RowElements;
        title?: string;
        illustration?: string;
        tutorial?: TccTutorialTooltip.options;
        disableStandardInput?: boolean;
    }
    interface rowClickEvent<T> {
        entity: T;
        index?: number;
    }
    interface change<T> {
        entity: T;
        changes: TccInputMask.valueChanges;
        icon?: TccIcon;
    }
    interface changes<T> {
        [entityId: string]: change<T>;
    }
    interface inputsLoaded<T> {
        inputs: string[];
        entity: T;
    }
}
export declare class TccStandardTableViewComponent<T> implements AfterViewInit, OnDestroy {
    private factory;
    private pagedDataManagerService;
    private dialog;
    private matDialog;
    private snackbarservice;
    private keyPressService;
    private userPropertyService;
    private dataCyStandardTableView;
    private dataCyStandardSliderDetails;
    private dataCySliderDetails;
    private dataCyStandardTableViewHidden;
    private dataCyStandardTableViewMultiSave;
    specialColumnDirectivesList: QueryList<SpecialColDirective>;
    tileTemplateRef: TemplateRef<any>;
    filterBar: TccFilterbarComponent;
    table: TccTableComponent<T>;
    slider: TccSliderRightComponent;
    tccStandardSliderDetailsView: TccStandardSliderDetailsViewComponent<T>;
    infinityScrollTiles: TccInfinityScrollComponent;
    inputMaskHTMLElementDirectives: QueryList<InputMaskHTMLElement>;
    set entities(entities: T[]);
    set options(options: TccStandardTableView.options<T>);
    changed: boolean;
    /** sets the standardTableView to display: none */
    set hide(hide: boolean);
    set standardDetailsTitle(standardDetailsTitle: string);
    cellClickEmitter: EventEmitter<any>;
    rowClickEmitter: EventEmitter<TccStandardTableView.rowClickEvent<T>>;
    scrollDownEmitter: EventEmitter<boolean>;
    checkboxEmitter: EventEmitter<TccTable.checkboxEvent>;
    sortTableEmitter: EventEmitter<TccTable.sortTableEvent>;
    contextMenuEmitter: EventEmitter<TccContextMenuServiceNamespace.contextMenuClickEvent>;
    tableLoadedEmitter: EventEmitter<boolean>;
    markTableRowEmitter: EventEmitter<T[]>;
    onPrimary: EventEmitter<void>;
    onCreate: EventEmitter<void>;
    onDelete: EventEmitter<T[]>;
    pageLoaded: EventEmitter<T[]>;
    onComponentViewChange: EventEmitter<string>;
    onFileUploadEvent: EventEmitter<FileList>;
    inputMaskInputsLoaded: EventEmitter<TccStandardTableView.inputsLoaded<T>>;
    inputMaskSubmit: EventEmitter<void>;
    inputMaskChangeTab: EventEmitter<{
        id: string;
        value: MatTabChangeEvent;
    }>;
    inputMaskChangeChip: EventEmitter<{
        id: string;
        index: number;
    }>;
    inputMaskChangePage: EventEmitter<{
        id: string;
        value: PageEvent;
    }>;
    inputMaskSearch: EventEmitter<TccInputMask.eventOutput<TccInputMask.ValueUnion>>;
    inputMaskSearchEnter: EventEmitter<TccInputMask.eventOutput<TccInputMask.ValueUnion>>;
    inputMaskValueChange: EventEmitter<TccInputMask.eventOutput<TccInputMask.ValueUnion>>;
    inputMaskValueChangeExtended: EventEmitter<TccInputMask.eventOutput<TccInputMask.ValueUnion>>;
    inputMaskFocusEvent: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskBlurEvent: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskInputButtonClick: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskRowButtonClick: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskButtonClick: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskSelectOpen: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskSearchListChange: EventEmitter<{
        id: string;
        value: Array<string>;
    }>;
    inputMaskSearchListChangePage: EventEmitter<{
        id: string;
        pagenumber: number;
        searchactive: boolean;
    }>;
    inputMaskSearchListSearch: EventEmitter<{
        id: string;
        searchstring: string;
        selection?: string;
    }>;
    inputMaskSearchListDialogClose: EventEmitter<TccInputMask.searchListDialogEvent>;
    inputMaskCreateListDialogClose: EventEmitter<TccInputMask.createListDialogEvent>;
    inputMaskCreateSimpleListDialogClose: EventEmitter<TccInputMask.eventOutput<TccInputMask.ValueUnion>>;
    inputMaskFieldMouseEnter: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskFieldMouseLeave: EventEmitter<TccInputMask.eventTrigger>;
    inputMaskOpenAccordion: EventEmitter<string>;
    inputMaskEntityValuesSet: EventEmitter<T>;
    save: EventEmitter<T | T[]>;
    afterSave: EventEmitter<T | T[]>;
    createEntity: EventEmitter<void>;
    sliderIconButtonEvent: EventEmitter<void>;
    sliderOutlinedButtonEvent: EventEmitter<void>;
    sliderPrimaryButtonEvent: EventEmitter<void>;
    private set multiSave(value);
    _tableInput: TccTable.TableInputs<T>;
    _useSliderDetailsView: boolean;
    _useSliderStandardDetailsView: boolean;
    _standardDetailsInputElements: TccInputMask.SectionElements;
    _standardDetailsProfileOptions: TccChooseProfileThumbnail.Options;
    _standardDetailsTitle: string;
    _noContentSettings: tccFilterbar.noContentSettings;
    _saveButtonCaption: string;
    _deleteButtonCaption: string;
    _standardPrimaryButtonTooltip: string;
    _filterOptions: tccFilter.FilterInputOptions;
    private _permanentFilter;
    _primaryButton: string;
    _primaryButtonIcon: string;
    _disableChooseProfile: boolean;
    _basePath: string;
    _hide: boolean;
    private _useSelectForTable;
    private _addSelectsForTable;
    private _entityName;
    private _entityPath;
    private _iconPath;
    private _nestedEntity;
    private _searchFields;
    hasSearch: boolean;
    private _internalCreateEntityCallback;
    private _createEntityOptions;
    private _multiSave;
    private _setValueChangesFunction;
    private _useStandardCreate;
    private _deleteGetNameFunction;
    private _deleteForbiddenFunction;
    private _orderBy;
    private _disableChangableColumns;
    private _generateChangableColumnsFunction;
    private _disabledTableColumns;
    _searchOnEnter: boolean;
    _sliderConfig: TccSectionNavigationButtonConfig;
    dataSource: Array<T>;
    infinityScrollContentType: TccInfinityScroll.contentType;
    private service;
    private serviceSelect;
    pagedDataManager: TccPagedDataManager<T>;
    deleteDisabled: boolean;
    _entities: T[];
    currEntity: T;
    changes: TccStandardTableView.changes<T>;
    private lastRefreshedCheckDirective;
    elementIds: {
        [elementId: string]: T;
    };
    _standardPrimaryButton: string;
    _deleteButton: string;
    changeableColumns: tccFilterbar.settings;
    displayedColumns: string[];
    private _searchEntities;
    private lastSearchString;
    get standardDetailsInputMask(): TccInputMaskComponent;
    constructor(factory: TccODataServiceFactory, pagedDataManagerService: TccPagedDataManagerService, dialog: TccDialogWindowService, matDialog: MatDialog, snackbarservice: TccSnackBarService, keyPressService: TccKeypressService, userPropertyService: TccUserPropertyService);
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private initObjectDetails;
    private initKeyPressService;
    private initSliderSubscriptions;
    private initService;
    private initServiceSelect;
    private generatePagedDataManager;
    private dataSubscribe;
    private localSearchEventHandler;
    private canSliderClose;
    getItemByIndex(index: number): Observable<T>;
    tableLoadedEvent(): void;
    refreshReferences(references: TccPagedDataManagerNamespace.refreshReferencesOptions<T>): void;
    private onKeyPressCreate;
    private onKeyPressDelete;
    afterCustomDeleteSuccess(deletedEntities: T[]): void;
    private onKeyPressSave;
    private changeView;
    cellClickEvent(event: any): void;
    selectEntity(row: TccTable.rowClickEvent): void;
    refreshDataManagerCheckDirectiveRef(): void;
    sortColumn(sort: {
        active: string;
        direction: "asc" | "desc" | "";
    }): void;
    contextMenuOptionClick(event: TccContextMenuServiceNamespace.contextMenuClickEvent): void;
    scrollDownEvent(event: boolean): void;
    markTableRowEvent(event: TccTable.checkboxEvent): void;
    private getSelectedItems;
    refreshTransformedValues(): void;
    standardDetailsSave(): void;
    onPrimaryButtonEvent(): void;
    onOutlinedButtonEvent(): void;
    onIconButtonEvent(): void;
    onFilterbarCreate(): void;
    onFilterbarPrimary(): void;
    onFilterbarSave(): void;
    private setIconInEntity;
    private changeSingleEntity;
    onFilterbarSaveCallback(entity: T): void;
    private onFilterbarSaveErrorCallback;
    onChangeColumnEvent(settings: tccFilterbar.settings): void;
    onFilterbarDelete(): void;
    /**
     * opens dialog to create new Entity
    */
    _createEntity(): void;
    /**
     * dialog callback to create new Workflow and save it to the Server
     * @param {TccInputDialogReturn} result dialog result
    */
    private _createEntityCallback;
    navigateOnEntitySelection(entity: T, index?: number): void;
    private _navigateOnEntitySelection;
    private addCurrChangesToChanges;
    getEntityId(entity: T): string;
    private generateId;
    private generateChangeableColumns;
    private getDisplayedColumns;
    onChangeComponetView(event: string): void;
    FileUploadEvent(event: FileList): void;
    _inputMaskInputsLoaded(event: string[]): void;
    _inputMaskSubmit(): void;
    _inputMaskChangeTab(event: {
        id: string;
        value: MatTabChangeEvent;
    }): void;
    _inputMaskChangeChip(event: {
        id: string;
        index: number;
    }): void;
    _inputMaskChangePage(event: {
        id: string;
        value: PageEvent;
    }): void;
    _inputMaskSearch(event: TccInputMask.eventOutput): void;
    _inputMaskSearchEnter(event: TccInputMask.eventOutput): void;
    _inputMaskValueChange(event: TccInputMask.eventOutput): void;
    _inputMaskValueChangeExtended(event: TccInputMask.eventOutput): void;
    _iconChanged(): void;
    _inputMaskFocusEvent(event: TccInputMask.eventTrigger): void;
    _inputMaskBlurEvent(event: TccInputMask.eventTrigger): void;
    _inputMaskInputButtonClick(event: TccInputMask.eventTrigger): void;
    _inputMaskRowButtonClick(event: TccInputMask.eventTrigger): void;
    _inputMaskButtonClick(event: TccInputMask.eventTrigger): void;
    _inputMaskSelectOpen(event: TccInputMask.eventTrigger): void;
    _inputMaskSearchListChange(event: {
        id: string;
        value: Array<string>;
    }): void;
    _inputMaskSearchListChangePage(event: {
        id: string;
        pagenumber: number;
        searchactive: boolean;
    }): void;
    _inputMaskSearchListSearch(event: {
        id: string;
        searchstring: string;
        selection?: string;
    }): void;
    _inputMaskSearchListDialogClose(event: TccInputMask.searchListDialogEvent): void;
    _inputMaskCreateListDialogClose(event: TccInputMask.createListDialogEvent): void;
    _inputMaskCreateSimpleListDialogClose(event: TccInputMask.eventOutput): void;
    _inputMaskFieldMouseEnter(event: TccInputMask.eventTrigger): void;
    _inputMaskFieldMouseLeave(event: TccInputMask.eventTrigger): void;
    _inputMaskOpenAccordion(event: string): void;
    _inputMaskEntityValuesSet(event: T): void;
}
