TryGhost/Ghost

View on GitHub
ghost/admin/app/components/modal-post-success.js

Summary

Maintainability
A
0 mins
Test Coverage
import Component from '@glimmer/component';
import copyTextToClipboard from 'ghost-admin/utils/copy-text-to-clipboard';
import {capitalize} from '@ember/string';
import {inject as service} from '@ember/service';
import {task, timeout} from 'ember-concurrency';

export default class PostSuccessModal extends Component {
    @service store;
    @service router;
    @service notifications;

    static modalOptions = {
        className: 'fullscreen-modal-wide fullscreen-modal-action modal-post-success',
        backgroundBlur: true
    };

    get post() {
        return this.args.data.post;
    }

    get postCount() {
        return this.args.data.postCount;
    }

    get showPostCount() {
        return this.args.data.showPostCount;
    }

    get encodedTitle() {
        return encodeURIComponent(this.post.title);
    }

    get encodedUrl() {
        return encodeURIComponent(this.post.url);
    }

    get encodedTitleAndUrl() {
        return encodeURIComponent(`${this.post.title} ${this.post.url}`);
    }

    @task
    *handleCopyLink() {
        copyTextToClipboard(this.post.url);
        yield timeout(1000);
        return true;
    }

    @task
    *handleCopyPreviewLink() {
        copyTextToClipboard(this.post.previewUrl);
        yield timeout(1000);
        return true;
    }

    @task
    *revertToDraftTask() {
        const currentPost = this.post;
        const originalStatus = currentPost.status;
        const originalPublishedAtUTC = currentPost.publishedAtUTC;

        try {
            if (currentPost.isScheduled) {
                currentPost.publishedAtUTC = null;
            }

            currentPost.status = 'draft';
            currentPost.emailOnly = false;

            yield currentPost.save();
            this.router.transitionTo('lexical-editor.edit', 'post', currentPost.id);

            const postType = capitalize(currentPost.displayName);
            this.notifications.showNotification(`${postType} reverted to a draft.`, {type: 'success'});

            return true;
        } catch (e) {
            currentPost.status = originalStatus;
            currentPost.publishedAtUTC = originalPublishedAtUTC;
            throw e;
        }
    }
}