import { OnDestroy } from '@angular/core';
import { Observable } from 'rxjs';
import { UserResourceService } from '../../resources/engine-endpoint/user-resource.service';
import { LoggerService } from '../../logger/services/logger.service';
import { SnackBarService } from '../../snack-bar/services/snack-bar.service';
import { TranslateService } from '@ngx-translate/core';
import { MessageResource } from '../../resources/interface/message-resource';
import { UserResource } from '../../resources/interface/user-resource';
import * as i0 from "@angular/core";
export interface UserListItem extends UserResource {
    selected: boolean;
    roles: Set<string>;
    toggle(): void;
}
export interface RolesObject {
    [k: string]: RoleObject;
}
interface RoleObject {
    perform?: boolean;
    delegate?: boolean;
    view?: boolean;
}
/**
 * Performs paged loading users from backend for [UserAssignComponent]{@link AbstractUserAssignComponent}.
 */
export declare class UserListService implements OnDestroy {
    private _resources;
    private _log;
    private _snackbar;
    private _translate;
    /**
     * UserValue array stream, that represents users loading from backend.
     */
    private readonly _users$;
    /**
     * Emit users loading status from backend.
     */
    private _loading$;
    /**
     * Number stream of next page users list, that to be requested from backend.
     */
    private _nextPage$;
    /**
     * Signals the end of loaded users.
     */
    private _endOfData;
    /**
     * Necessary for pagination parameters in user assign loading from backend.
     */
    private _pagination;
    /**
     * Signals if response is empty or no.
     */
    private _clear;
    /**
     * The search content that should be applied to the request
     */
    private _searchQuery;
    /**
     * Roles that should be applied to the request
     */
    rolesQuery: Array<string>;
    /**
     * negative Roles that should be applied to the request
     */
    negativeRolesQuery: Array<string>;
    private _updateProgress$;
    private _usersReload$;
    /**
     * Inject services.
     * Initialize declared attributes.
     *
     * Loading and mapped stream of users.
     * @param _resources Loading users from backend.
     * @param _log Logging action status.
     * @param _snackbar Display info about loading from backend for user.
     * @param _translate Translate messages for user.
     */
    constructor(_resources: UserResourceService, _log: LoggerService, _snackbar: SnackBarService, _translate: TranslateService);
    ngOnDestroy(): void;
    get loading(): boolean;
    get loading$(): Observable<boolean>;
    get usersReload$(): Observable<void>;
    get users$(): Observable<Array<UserListItem>>;
    get updating$(): Observable<boolean>;
    get totalUsers(): number;
    /**
     * Get all users from backend and mapped to [UserValue]{@link UserValue} interface with catching errors.
     * @param page Page number that is requested. / Next page users list.
     */
    loadPage(page: number): Observable<{
        [k: string]: UserListItem;
    }>;
    /**
     * Set value to nextPage stream as next page users list.
     * @param lastRendered Last rendered user index.
     * @param totalRendered Total loaded size users.
     */
    nextPage(lastRendered: number, totalRendered: number): void;
    /**
     * Reload page with users.
     */
    reload(newSearchQuery?: string): void;
    updateRoles(selectedUsers: Array<UserListItem>, selectedRoles?: Array<string>): Observable<Array<MessageResource>>;
    /**
     * Returns HttpParams with page params addition.
     * @param params Existing HttpParams.
     * @param page Page number that is requested. / Next page users list.
     */
    private addPageParams;
    static ɵfac: i0.ɵɵFactoryDeclaration<UserListService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<UserListService>;
}
export {};
