123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { ReactiveCache } from '/imports/reactiveCache';
- const commentFormIsOpen = new ReactiveVar(false);
- BlazeComponent.extendComponent({
- onDestroyed() {
- commentFormIsOpen.set(false);
- $('.note-popover').hide();
- },
- commentFormIsOpen() {
- return commentFormIsOpen.get();
- },
- getInput() {
- return this.$('.js-new-comment-input');
- },
- events() {
- return [
- {
- 'submit .js-new-comment-form'(evt) {
- const input = this.getInput();
- const text = input.val().trim();
- const card = this.currentData();
- let boardId = card.boardId;
- let cardId = card._id;
- if (card.isLinkedCard()) {
- boardId = ReactiveCache.getCard(card.linkedId).boardId;
- cardId = card.linkedId;
- } else if (card.isLinkedBoard()) {
- boardId = card.linkedId;
- }
- if (text) {
- CardComments.insert({
- text,
- boardId,
- cardId,
- });
- resetCommentInput(input);
- Tracker.flush();
- autosize.update(input);
- input.trigger('submitted');
- }
- evt.preventDefault();
- },
- // Pressing Ctrl+Enter should submit the form
- 'keydown form textarea'(evt) {
- if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
- this.find('button[type=submit]').click();
- }
- },
- },
- ];
- },
- }).register('commentForm');
- BlazeComponent.extendComponent({
- getComments() {
- const ret = this.data().comments();
- return ret;
- },
- }).register("comments");
- BlazeComponent.extendComponent({
- events() {
- return [
- {
- 'click .js-delete-comment': Popup.afterConfirm('deleteComment', () => {
- const commentId = this.data()._id;
- CardComments.remove(commentId);
- Popup.back();
- }),
- 'submit .js-edit-comment'(evt) {
- evt.preventDefault();
- const commentText = this.currentComponent()
- .getValue()
- .trim();
- const commentId = this.data()._id;
- if (commentText) {
- CardComments.update(commentId, {
- $set: {
- text: commentText,
- },
- });
- }
- },
- },
- ];
- },
- }).register("comment");
- // XXX This should be a static method of the `commentForm` component
- function resetCommentInput(input) {
- input.val(''); // without manually trigger, input event won't be fired
- input.blur();
- commentFormIsOpen.set(false);
- }
- // XXX This should handled a `onUpdated` callback of the `commentForm` component
- // but since this callback doesn't exists, and `onRendered` is not called if the
- // data is not destroyed and recreated, we simulate the desired callback using
- // Tracker.autorun to register the component dependencies, and re-run when these
- // dependencies are invalidated. A better component API would remove this hack.
- Tracker.autorun(() => {
- Utils.getCurrentCardId();
- Tracker.afterFlush(() => {
- autosize.update($('.js-new-comment-input'));
- });
- });
- EscapeActions.register(
- 'inlinedForm',
- () => {
- const draftKey = {
- fieldName: 'cardComment',
- docId: Utils.getCurrentCardId(),
- };
- const commentInput = $('.js-new-comment-input');
- const draft = commentInput.val().trim();
- if (draft) {
- UnsavedEdits.set(draftKey, draft);
- } else {
- UnsavedEdits.reset(draftKey);
- }
- resetCommentInput(commentInput);
- },
- () => {
- return commentFormIsOpen.get();
- },
- {
- noClickEscapeOn: '.js-new-comment',
- },
- );
|