Home Reference Source

js/controllers/DeleteCommentViewController.js

import ViewController from '~/controllers/ViewController';
import DeleteComment from '~/models/Request/DeleteComment';
import SwappingViewController from '~/controllers/SwappingViewController';
import Template from '~/template/Template'
import { HandleUnhandledPromise } from '~/helpers/ErrorManager';

export const CommentDeleteFailed = Symbol('Comment.Delete.Error.NetworkError');

/**
 * Deletes a comment
 */
export default class DeleteCommentViewController extends ViewController {

    /**
     * @param {HTMLElement} trigger - The delete button trigger
     * @param {CommentViewController} commentController
     */
    constructor(trigger, commentController) {
        super(trigger);

        /** @type {CommentViewController} */
        this.commentController = commentController;

        this.swappingController = new SwappingViewController(this.commentController.commentNode);

        trigger.addEventListener('click', () => {
            if (confirm('Are you sure you want to delete this comment?')) {
                this.trigger()
                    .catch(HandleUnhandledPromise);
            }
        })
    }

    /**
     * Triggers the delete process.
     */
    async trigger() {
        const request = new DeleteComment({
            comment: this.commentController.comment
        });

        // TODO: show a deleted screen
        // this.swappingController.displayAlternate();

        try {
            const result = await request.run();
        } catch(error) {
            ErrorManager.raise(`An error occured deleting the comment (ID ${this.commentController.comment.id}`, CommentDeleteFailed);
        }

        this.commentController.commentNode.parentNode.removeChild(this.commentController.commentNode);
    }

}