mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
Add methods to models for archived entities
This commit is contained in:
parent
01bd94d2b3
commit
bbcb236a46
5 changed files with 115 additions and 44 deletions
|
|
@ -88,6 +88,7 @@ BlazeComponent.extendComponent({
|
||||||
s: 'swimlanes',
|
s: 'swimlanes',
|
||||||
list: 'lists',
|
list: 'lists',
|
||||||
l: 'lists',
|
l: 'lists',
|
||||||
|
is: 'is',
|
||||||
};
|
};
|
||||||
const selector = {
|
const selector = {
|
||||||
boards: [],
|
boards: [],
|
||||||
|
|
@ -95,6 +96,7 @@ BlazeComponent.extendComponent({
|
||||||
lists: [],
|
lists: [],
|
||||||
users: [],
|
users: [],
|
||||||
labels: [],
|
labels: [],
|
||||||
|
is: [],
|
||||||
};
|
};
|
||||||
let text = '';
|
let text = '';
|
||||||
while (query) {
|
while (query) {
|
||||||
|
|
@ -150,6 +152,48 @@ BlazeComponent.extendComponent({
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
console.log('text:', text);
|
console.log('text:', text);
|
||||||
|
|
||||||
|
if (selector.boards.length) {
|
||||||
|
selector.boardsSelector = {
|
||||||
|
archived: false,
|
||||||
|
title: { $in: [] },
|
||||||
|
};
|
||||||
|
selector.boards.forEach(term => {
|
||||||
|
selector.boardsSelector.title.$in.push(term);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selector.lists.length) {
|
||||||
|
selector.listsSelector = {
|
||||||
|
archived: false,
|
||||||
|
title: { $in: [] },
|
||||||
|
};
|
||||||
|
selector.lists.forEach(term => {
|
||||||
|
selector.listsSelector.title.$in.push(term);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selector.swimlanes.length) {
|
||||||
|
selector.swimlanesSelector = {
|
||||||
|
archived: false,
|
||||||
|
title: { $in: [] },
|
||||||
|
};
|
||||||
|
selector.swimlanes.forEach(term => {
|
||||||
|
selector.swimlanesSelector.title.$in.push(term);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selector.labels.length) {
|
||||||
|
selector.labelsSelector = {
|
||||||
|
archived: false,
|
||||||
|
title: { $in: [] },
|
||||||
|
};
|
||||||
|
selector.labels.forEach(term => {
|
||||||
|
selector.labelsSelector.title.$in.push(term);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
selector.text = text;
|
||||||
|
|
||||||
this.autorun(() => {
|
this.autorun(() => {
|
||||||
const handle = subManager.subscribe('globalSearch', selector);
|
const handle = subManager.subscribe('globalSearch', selector);
|
||||||
Tracker.nonreactive(() => {
|
Tracker.nonreactive(() => {
|
||||||
|
|
|
||||||
|
|
@ -1208,6 +1208,26 @@ function boardRemover(userId, doc) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Boards.userBoards = (userId, includeArchived = false, selector = {}) => {
|
||||||
|
if (!includeArchived) {
|
||||||
|
selector = {
|
||||||
|
archived: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
selector.$or = [
|
||||||
|
{ permission: 'public' },
|
||||||
|
{ members: { $elemMatch: { userId, isActive: true } } },
|
||||||
|
];
|
||||||
|
|
||||||
|
return Boards.find(selector);
|
||||||
|
};
|
||||||
|
|
||||||
|
Boards.userBoardIds = (userId, includeArchived = false, selector = {}) => {
|
||||||
|
return Boards.userBoards(userId, includeArchived, selector).map(board => {
|
||||||
|
return board._id;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
if (Meteor.isServer) {
|
if (Meteor.isServer) {
|
||||||
Boards.allow({
|
Boards.allow({
|
||||||
insert: Meteor.userId,
|
insert: Meteor.userId,
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,16 @@ Lists.mutations({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Lists.archivedLists = () => {
|
||||||
|
return Lists.find({ archived: true });
|
||||||
|
};
|
||||||
|
|
||||||
|
Lists.archivedListIds = () => {
|
||||||
|
return Lists.archivedLists().map(list => {
|
||||||
|
return list._id;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
applyWipLimit(listId, limit) {
|
applyWipLimit(listId, limit) {
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
|
|
|
||||||
|
|
@ -283,6 +283,16 @@ Swimlanes.mutations({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Swimlanes.archivedSwimlanes = () => {
|
||||||
|
return Swimlanes.find({ archived: true });
|
||||||
|
};
|
||||||
|
|
||||||
|
Swimlanes.archivedSwimlaneIds = () => {
|
||||||
|
return Swimlanes.archivedSwimlanes().map(swim => {
|
||||||
|
return swim._id;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Swimlanes.hookOptions.after.update = { fetchPrevious: false };
|
Swimlanes.hookOptions.after.update = { fetchPrevious: false };
|
||||||
|
|
||||||
if (Meteor.isServer) {
|
if (Meteor.isServer) {
|
||||||
|
|
|
||||||
|
|
@ -179,56 +179,26 @@ Meteor.publish('globalSearch', function(queryParams) {
|
||||||
check(queryParams, Object);
|
check(queryParams, Object);
|
||||||
|
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
console.log('selector:', queryParams);
|
console.log('queryParams:', queryParams);
|
||||||
|
|
||||||
const user = Users.findOne(this.userId);
|
const user = Users.findOne(this.userId);
|
||||||
|
|
||||||
const archivedBoards = [];
|
// const archivedSwimlanes = Swimlanes.archivedSwimlaneIds();
|
||||||
Boards.find({ archived: true }).forEach(board => {
|
|
||||||
archivedBoards.push(board._id);
|
|
||||||
});
|
|
||||||
|
|
||||||
const archivedSwimlanes = [];
|
// const permiitedBoards = Boards.userBoardIds(user._id);
|
||||||
Swimlanes.find({ archived: true }).forEach(swimlane => {
|
|
||||||
archivedSwimlanes.push(swimlane._id);
|
|
||||||
});
|
|
||||||
|
|
||||||
const archivedLists = [];
|
|
||||||
Lists.find({ archived: true }).forEach(list => {
|
|
||||||
archivedLists.push(list._id);
|
|
||||||
});
|
|
||||||
|
|
||||||
const permiitedBoards = [];
|
|
||||||
let selector = {
|
let selector = {
|
||||||
archived: false,
|
archived: false,
|
||||||
};
|
};
|
||||||
// if user is not an admin allow her to see cards only from boards where
|
|
||||||
// she is a member
|
|
||||||
if (!user.isAdmin) {
|
|
||||||
selector.$or = [
|
|
||||||
{ permission: 'public' },
|
|
||||||
{ members: { $elemMatch: { userId: user._id, isActive: true } } },
|
|
||||||
];
|
|
||||||
}
|
|
||||||
if (queryParams.boards.length) {
|
|
||||||
selector.title = { $in: [] };
|
|
||||||
queryParams.boards.forEach(term => {
|
|
||||||
selector.title.$in.push(term);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Boards.find(selector).forEach(board => {
|
|
||||||
permiitedBoards.push(board._id);
|
|
||||||
});
|
|
||||||
|
|
||||||
const searchLists = [];
|
const searchLists = [];
|
||||||
if (queryParams.lists.length) {
|
// eslint-disable-next-line no-console
|
||||||
selector = {
|
// console.log('listsSelector:', queryParams.keys());
|
||||||
archived: false,
|
if ('listsSelector' in queryParams) {
|
||||||
title: { $in: [] },
|
// eslint-disable-next-line no-console
|
||||||
};
|
// console.log('listsSelector:', queryParams.listsSelector.keys());
|
||||||
queryParams.lists.forEach(term => {
|
for (const key in queryParams.listsSelector) {
|
||||||
selector.title.$in.push(term);
|
selector[key] = queryParams.listsSelector[key];
|
||||||
});
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
console.log('search list selector:', selector);
|
console.log('search list selector:', selector);
|
||||||
|
|
@ -239,17 +209,34 @@ Meteor.publish('globalSearch', function(queryParams) {
|
||||||
console.log('search lists:', searchLists);
|
console.log('search lists:', searchLists);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const searchSwimlanes = [];
|
||||||
|
if ('swimlanesSelector' in queryParams) {
|
||||||
|
for (const key in queryParams.swimlanesSelector) {
|
||||||
|
selector[key] = queryParams.swimlanesSelector[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
Lists.find(selector).forEach(swim => {
|
||||||
|
searchSwimlanes.push(swim._id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
selector = {
|
selector = {
|
||||||
archived: false,
|
archived: false,
|
||||||
boardId: { $nin: archivedBoards, $in: permiitedBoards },
|
boardId: { $in: Boards.userBoardIds(user._id) },
|
||||||
swimlaneId: { $nin: archivedSwimlanes },
|
swimlaneId: { $nin: Swimlanes.archivedSwimlaneIds() },
|
||||||
listId: { $nin: archivedLists },
|
listId: { $nin: Lists.archivedListIds() },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (searchSwimlanes.length) {
|
||||||
|
selector.swimlaneId.$in = searchSwimlanes;
|
||||||
|
}
|
||||||
|
|
||||||
if (searchLists.length) {
|
if (searchLists.length) {
|
||||||
selector.listId.$in = searchLists;
|
selector.listId.$in = searchLists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('selector:', selector);
|
||||||
const cards = Cards.find(selector, {
|
const cards = Cards.find(selector, {
|
||||||
fields: {
|
fields: {
|
||||||
_id: 1,
|
_id: 1,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue