mirror of
https://github.com/wekan/wekan.git
synced 2026-03-13 17:06:13 +01:00
Convert sidebar, sidebarArchives, sidebarCustomFields, sidebarFilters, sidebarSearches, and all settings panel components to use native Meteor Template.onCreated/helpers/events pattern.
303 lines
7.4 KiB
JavaScript
303 lines
7.4 KiB
JavaScript
import { ReactiveCache } from '/imports/reactiveCache';
|
|
import { TAPi18n } from '/imports/i18n';
|
|
import { AttachmentStorage } from '/models/attachments';
|
|
import { CardSearchPaged } from '/client/lib/cardSearch';
|
|
import SessionData from '/models/usersessiondata';
|
|
import { QueryParams } from '/config/query-classes';
|
|
import { OPERATOR_LIMIT } from '/config/search-const';
|
|
const filesize = require('filesize');
|
|
|
|
// --- Shared helper functions (formerly AdminReport base class methods) ---
|
|
|
|
function yesOrNo(value) {
|
|
if (value) {
|
|
return TAPi18n.__('yes');
|
|
} else {
|
|
return TAPi18n.__('no');
|
|
}
|
|
}
|
|
|
|
function fileSizeHelper(size) {
|
|
let ret = "";
|
|
if (_.isNumber(size)) {
|
|
ret = filesize(size);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
function abbreviate(text) {
|
|
if (text?.length > 30) {
|
|
return `${text.substr(0, 29)}...`;
|
|
}
|
|
return text;
|
|
}
|
|
|
|
function collectionResults(collection) {
|
|
return collection.find();
|
|
}
|
|
|
|
function collectionResultsCount(collection) {
|
|
return collection.find().count();
|
|
}
|
|
|
|
// --- adminReports template ---
|
|
|
|
Template.adminReports.onCreated(function () {
|
|
this.subscription = null;
|
|
this.showFilesReport = new ReactiveVar(false);
|
|
this.showBrokenCardsReport = new ReactiveVar(false);
|
|
this.showOrphanedFilesReport = new ReactiveVar(false);
|
|
this.showRulesReport = new ReactiveVar(false);
|
|
this.showCardsReport = new ReactiveVar(false);
|
|
this.showBoardsReport = new ReactiveVar(false);
|
|
this.sessionId = SessionData.getSessionId();
|
|
this.error = new ReactiveVar('');
|
|
this.loading = new ReactiveVar(false);
|
|
});
|
|
|
|
Template.adminReports.helpers({
|
|
showFilesReport() {
|
|
return Template.instance().showFilesReport;
|
|
},
|
|
showBrokenCardsReport() {
|
|
return Template.instance().showBrokenCardsReport;
|
|
},
|
|
showOrphanedFilesReport() {
|
|
return Template.instance().showOrphanedFilesReport;
|
|
},
|
|
showRulesReport() {
|
|
return Template.instance().showRulesReport;
|
|
},
|
|
showCardsReport() {
|
|
return Template.instance().showCardsReport;
|
|
},
|
|
showBoardsReport() {
|
|
return Template.instance().showBoardsReport;
|
|
},
|
|
loading() {
|
|
return Template.instance().loading;
|
|
},
|
|
});
|
|
|
|
Template.adminReports.events({
|
|
'click a.js-report-broken'(event) {
|
|
switchMenu(event, Template.instance());
|
|
},
|
|
'click a.js-report-files'(event) {
|
|
switchMenu(event, Template.instance());
|
|
},
|
|
'click a.js-report-rules'(event) {
|
|
switchMenu(event, Template.instance());
|
|
},
|
|
'click a.js-report-cards'(event) {
|
|
switchMenu(event, Template.instance());
|
|
},
|
|
'click a.js-report-boards'(event) {
|
|
switchMenu(event, Template.instance());
|
|
},
|
|
});
|
|
|
|
function switchMenu(event, tmpl) {
|
|
const target = $(event.target);
|
|
if (!target.hasClass('active')) {
|
|
tmpl.loading.set(true);
|
|
tmpl.showFilesReport.set(false);
|
|
tmpl.showBrokenCardsReport.set(false);
|
|
tmpl.showOrphanedFilesReport.set(false);
|
|
tmpl.showRulesReport.set(false);
|
|
tmpl.showBoardsReport.set(false);
|
|
tmpl.showCardsReport.set(false);
|
|
if (tmpl.subscription) {
|
|
tmpl.subscription.stop();
|
|
}
|
|
|
|
$('.side-menu li.active').removeClass('active');
|
|
target.parent().addClass('active');
|
|
const targetID = target.data('id');
|
|
|
|
if ('report-broken' === targetID) {
|
|
tmpl.showBrokenCardsReport.set(true);
|
|
tmpl.subscription = Meteor.subscribe(
|
|
'brokenCards',
|
|
SessionData.getSessionId(),
|
|
() => {
|
|
tmpl.loading.set(false);
|
|
},
|
|
);
|
|
} else if ('report-files' === targetID) {
|
|
tmpl.showFilesReport.set(true);
|
|
tmpl.subscription = Meteor.subscribe('attachmentsList', () => {
|
|
tmpl.loading.set(false);
|
|
});
|
|
} else if ('report-rules' === targetID) {
|
|
tmpl.subscription = Meteor.subscribe('rulesReport', () => {
|
|
tmpl.showRulesReport.set(true);
|
|
tmpl.loading.set(false);
|
|
});
|
|
} else if ('report-boards' === targetID) {
|
|
tmpl.subscription = Meteor.subscribe('boardsReport', () => {
|
|
tmpl.showBoardsReport.set(true);
|
|
tmpl.loading.set(false);
|
|
});
|
|
} else if ('report-cards' === targetID) {
|
|
const qp = new QueryParams();
|
|
qp.addPredicate(OPERATOR_LIMIT, 300);
|
|
tmpl.subscription = Meteor.subscribe(
|
|
'globalSearch',
|
|
tmpl.sessionId,
|
|
qp.getParams(),
|
|
qp.text,
|
|
() => {
|
|
tmpl.showCardsReport.set(true);
|
|
tmpl.loading.set(false);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// --- filesReport template ---
|
|
|
|
Template.filesReport.helpers({
|
|
results() {
|
|
return collectionResults(Attachments);
|
|
},
|
|
resultsCount() {
|
|
return collectionResultsCount(Attachments);
|
|
},
|
|
fileSize(size) {
|
|
return fileSizeHelper(size);
|
|
},
|
|
});
|
|
|
|
// --- rulesReport template ---
|
|
|
|
Template.rulesReport.helpers({
|
|
results() {
|
|
const rules = [];
|
|
|
|
ReactiveCache.getRules().forEach(rule => {
|
|
rules.push({
|
|
_id: rule._id,
|
|
title: rule.title,
|
|
boardId: rule.boardId,
|
|
boardTitle: rule.board().title,
|
|
action: rule.action(),
|
|
trigger: rule.trigger(),
|
|
});
|
|
});
|
|
|
|
// eslint-disable-next-line no-console
|
|
console.log('rows:', rules);
|
|
return rules;
|
|
},
|
|
resultsCount() {
|
|
return collectionResultsCount(Rules);
|
|
},
|
|
});
|
|
|
|
// --- boardsReport template ---
|
|
|
|
Template.boardsReport.helpers({
|
|
results() {
|
|
return collectionResults(Boards);
|
|
},
|
|
resultsCount() {
|
|
return collectionResultsCount(Boards);
|
|
},
|
|
yesOrNo(value) {
|
|
return yesOrNo(value);
|
|
},
|
|
abbreviate(text) {
|
|
return abbreviate(text);
|
|
},
|
|
userNames(members) {
|
|
const ret = (members || [])
|
|
.map(_member => {
|
|
const _ret = ReactiveCache.getUser(_member.userId)?.username || _member.userId;
|
|
return _ret;
|
|
})
|
|
.join(", ");
|
|
return ret;
|
|
},
|
|
teams(memberTeams) {
|
|
const ret = (memberTeams || [])
|
|
.map(_memberTeam => {
|
|
const _ret = ReactiveCache.getTeam(_memberTeam.teamId)?.teamDisplayName || _memberTeam.teamId;
|
|
return _ret;
|
|
})
|
|
.join(", ");
|
|
return ret;
|
|
},
|
|
orgs(orgs) {
|
|
const ret = (orgs || [])
|
|
.map(_orgs => {
|
|
const _ret = ReactiveCache.getOrg(_orgs.orgId)?.orgDisplayName || _orgs.orgId;
|
|
return _ret;
|
|
})
|
|
.join(", ");
|
|
return ret;
|
|
},
|
|
});
|
|
|
|
// --- cardsReport template ---
|
|
|
|
Template.cardsReport.helpers({
|
|
results() {
|
|
return collectionResults(Cards);
|
|
},
|
|
resultsCount() {
|
|
return collectionResultsCount(Cards);
|
|
},
|
|
abbreviate(text) {
|
|
return abbreviate(text);
|
|
},
|
|
userNames(userIds) {
|
|
const ret = (userIds || [])
|
|
.map(_userId => {
|
|
const _ret = ReactiveCache.getUser(_userId)?.username;
|
|
return _ret;
|
|
})
|
|
.join(", ");
|
|
return ret;
|
|
},
|
|
});
|
|
|
|
// --- brokenCardsReport template ---
|
|
|
|
Template.brokenCardsReport.onCreated(function () {
|
|
const search = new CardSearchPaged(this);
|
|
this.search = search;
|
|
});
|
|
|
|
Template.brokenCardsReport.helpers({
|
|
resultsCount() {
|
|
return Template.instance().search.resultsCount;
|
|
},
|
|
resultsHeading() {
|
|
return Template.instance().search.resultsHeading;
|
|
},
|
|
results() {
|
|
return Template.instance().search.results;
|
|
},
|
|
getSearchHref() {
|
|
return Template.instance().search.getSearchHref();
|
|
},
|
|
hasPreviousPage() {
|
|
return Template.instance().search.hasPreviousPage;
|
|
},
|
|
hasNextPage() {
|
|
return Template.instance().search.hasNextPage;
|
|
},
|
|
});
|
|
|
|
Template.brokenCardsReport.events({
|
|
'click .js-next-page'(evt, tpl) {
|
|
evt.preventDefault();
|
|
tpl.search.nextPage();
|
|
},
|
|
'click .js-previous-page'(evt, tpl) {
|
|
evt.preventDefault();
|
|
tpl.search.previousPage();
|
|
},
|
|
});
|