import { Store } from '@ngrx/store';
import { User, UserService } from 'ngx-login-client';
import { Observable } from 'rxjs';
import { AppState } from './../states/app.state';
import { Mapper, MapTree, modelService } from './common.model';
import { UserQuery, UserUI } from './user';
export declare class Comment extends modelService {
    attributes: CommentAttributes;
    relationships: {
        creator?: {
            data: {
                id: string;
                type: string;
            };
        };
        parent?: {
            data: {
                id: string;
                type: string;
            };
        };
    };
    links: CommentLink;
    relationalData?: RelationalData;
}
export declare class CommentLink {
    self: string;
}
export declare class CommentAttributes {
    body: string;
    'body.rendered': string;
    'markup': string;
    'created-at': string;
}
export declare class Comments {
    data: Comment[];
}
export declare class RelationalData {
    creator?: User;
}
export interface CommentUI {
    id: string;
    body: string;
    markup: string;
    createdAt: string;
    creatorId: string;
    creator?: Observable<UserUI>;
    bodyRendered: string;
    selfLink: string;
    parentId: string;
    children?: CommentUI[];
    allowEdit?: boolean;
}
export interface CommentService extends Comment {
}
export declare class CommentMapper implements Mapper<CommentService, CommentUI> {
    constructor();
    serviceToUiMapTree: MapTree;
    uiToServiceMapTree: MapTree;
    toUIModel(arg: CommentService): CommentUI;
    toServiceModel(arg: CommentUI): CommentService;
}
export declare class CommentQuery {
    private store;
    private userQuery;
    private userService;
    private commentSource;
    constructor(store: Store<AppState>, userQuery: UserQuery, userService: UserService);
    getComments(commentIds: string[]): void;
    getCommentsWithCreators(): Observable<CommentUI[]>;
    getCommentsWithChildren(): Observable<CommentUI[]>;
    createComment(url: string, comment: CommentUI): void;
    updateComment(comment: CommentUI): void;
    dispatchGet(url: string): void;
}
