123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- const activitiesPerPage = 20;
- BlazeComponent.extendComponent({
- onCreated() {
- // XXX Should we use ReactiveNumber?
- this.page = new ReactiveVar(1);
- this.loadNextPageLocked = false;
- const sidebar = this.parentComponent(); // XXX for some reason not working
- sidebar.callFirstWith(null, 'resetNextPeak');
- this.autorun(() => {
- const mode = this.data().mode;
- const capitalizedMode = Utils.capitalize(mode);
- const id = Session.get(`current${capitalizedMode}`);
- const limit = this.page.get() * activitiesPerPage;
- const user = Meteor.user();
- const hideSystem = user ? user.hasHiddenSystemMessages() : false;
- if (id === null)
- return;
- this.subscribe('activities', mode, id, limit, hideSystem, () => {
- this.loadNextPageLocked = false;
- // If the sibear peak hasn't increased, that mean that there are no more
- // activities, and we can stop calling new subscriptions.
- // XXX This is hacky! We need to know excatly and reactively how many
- // activities there are, we probably want to denormalize this number
- // dirrectly into card and board documents.
- const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak');
- sidebar.calculateNextPeak();
- const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak');
- if (nextPeakBefore === nextPeakAfter) {
- sidebar.callFirstWith(null, 'resetNextPeak');
- }
- });
- });
- },
- loadNextPage() {
- if (this.loadNextPageLocked === false) {
- this.page.set(this.page.get() + 1);
- this.loadNextPageLocked = true;
- }
- },
- boardLabel() {
- return TAPi18n.__('this-board');
- },
- cardLabel() {
- return TAPi18n.__('this-card');
- },
- cardLink() {
- const card = this.currentData().card();
- return card && Blaze.toHTML(HTML.A({
- href: card.absoluteUrl(),
- 'class': 'action-card',
- }, card.title));
- },
- listLabel() {
- return this.currentData().list().title;
- },
- sourceLink() {
- const source = this.currentData().source;
- if(source) {
- if(source.url) {
- return Blaze.toHTML(HTML.A({
- href: source.url,
- }, source.system));
- } else {
- return source.system;
- }
- }
- return null;
- },
- memberLink() {
- return Blaze.toHTMLWithData(Template.memberName, {
- user: this.currentData().member(),
- });
- },
- attachmentLink() {
- const attachment = this.currentData().attachment();
- // trying to display url before file is stored generates js errors
- return attachment && attachment.url({ download: true }) && Blaze.toHTML(HTML.A({
- href: attachment.url({ download: true }),
- target: '_blank',
- }, attachment.name()));
- },
- customField() {
- const customField = this.currentData().customField();
- return customField.name;
- },
- events() {
- return [{
- // XXX We should use Popup.afterConfirmation here
- 'click .js-delete-comment'() {
- const commentId = this.currentData().commentId;
- CardComments.remove(commentId);
- },
- 'submit .js-edit-comment'(evt) {
- evt.preventDefault();
- const commentText = this.currentComponent().getValue().trim();
- const commentId = Template.parentData().commentId;
- if (commentText) {
- CardComments.update(commentId, {
- $set: {
- text: commentText,
- },
- });
- }
- },
- }];
- },
- }).register('activities');
|