import { EntityState } from '@ngrx/entity';
import { MemoizedSelector, Store } from '@ngrx/store';
import { Space } from 'ngx-fabric8-wit';
import { Observable } from 'rxjs';
import { AppState } from '../states/app.state';
import { Mapper, MapTree, modelService, modelUI } from './common.model';
export declare class WorkItemType extends modelService {
    attributes?: {
        name: string;
        version: number;
        description: string;
        icon: string;
        fields: any;
    };
    relationships?: {
        guidedChildTypes?: {
            data?: WorkItemType[];
        };
        space?: Space;
    };
}
export declare class WorkItemTypeField {
    description?: string;
    label: string;
    required: boolean;
    type: {
        componentType?: string;
        baseType?: string;
        kind: string;
        values?: string[];
    };
}
export interface WorkItemTypeService extends WorkItemType {
}
export interface WorkItemTypeUI extends modelUI {
    icon: string;
    version: number;
    type: string;
    description: string;
    childTypes: any;
    infotip: string;
    fields: Map<string, WorkItemTypeField> | any;
    dynamicfields?: any;
}
export declare class WorkItemTypeMapper implements Mapper<WorkItemTypeService, WorkItemTypeUI> {
    serviceToUiMapTree: MapTree;
    uiToServiceMapTree: MapTree;
    toUIModel(arg: WorkItemTypeService): WorkItemTypeUI;
    toServiceModel(arg: WorkItemTypeUI): WorkItemTypeService;
}
export declare class WorkItemTypeResolver {
    private allTypes;
    private normalizedTypes;
    constructor(allTypes?: WorkItemTypeUI[]);
    resolveChildren(): void;
    getResolvedWorkItemTypes(): WorkItemTypeUI[];
}
export interface WorkItemTypeStateModel extends EntityState<WorkItemTypeUI> {
}
export declare const workItemTypeSelector: MemoizedSelector<object, WorkItemTypeStateModel>;
export declare class WorkItemTypeQuery {
    private store;
    constructor(store: Store<AppState>);
    getAllWorkItemTypesSelector: MemoizedSelector<object, WorkItemTypeUI[]>;
    getWorkItemTypesWithChildrenSelector: MemoizedSelector<object, WorkItemTypeUI[]>;
    workItemTypeSource: Observable<WorkItemTypeUI[]>;
    /**
     * return observable of all workItemTypes
     * without their child types
     */
    getWorkItemTypes(): Observable<WorkItemTypeUI[]>;
    getWorkItemTypesWithChildren(): Observable<WorkItemTypeUI[]>;
    getWorkItemTypeWithChildrenById(id: string): Observable<WorkItemTypeUI>;
    getWorkItemTypeById(id: string): Observable<WorkItemTypeUI>;
}
