|
@@ -510,6 +510,7 @@ Boards.helpers({
|
|
|
const oldId = this._id;
|
|
|
delete this._id;
|
|
|
delete this.slug;
|
|
|
+ this.title = this.copyTitle();
|
|
|
const _id = Boards.insert(this);
|
|
|
|
|
|
// Copy all swimlanes in board
|
|
@@ -569,20 +570,7 @@ Boards.helpers({
|
|
|
* @returns {string|null}
|
|
|
*/
|
|
|
copyTitle() {
|
|
|
- const m = this.title.match(/^(?<title>.*?)\s*(\[(?<num>\d+)]\s*$|\s*$)/);
|
|
|
- const title = escapeForRegex(m.groups.title);
|
|
|
- let num = 0;
|
|
|
- Boards.find({ title: new RegExp(`^${title}\\s*\\[\\d+]\\s*$`) }).forEach(
|
|
|
- board => {
|
|
|
- const m = board.title.match(/^(?<title>.*?)\s*\[(?<num>\d+)]\s*$/);
|
|
|
- if (m) {
|
|
|
- const n = parseInt(m.groups.num, 10);
|
|
|
- num = num < n ? n : num;
|
|
|
- }
|
|
|
- },
|
|
|
- );
|
|
|
-
|
|
|
- return `${title} [${num + 1}]`;
|
|
|
+ return Boards.uniqueTitle(this.title);
|
|
|
},
|
|
|
|
|
|
/**
|
|
@@ -1274,6 +1262,23 @@ function boardRemover(userId, doc) {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+Boards.uniqueTitle = title => {
|
|
|
+ const m = title.match(/^(?<title>.*?)\s*(\[(?<num>\d+)]\s*$|\s*$)/);
|
|
|
+ const base = escapeForRegex(m.groups.title);
|
|
|
+ let num = 0;
|
|
|
+ Boards.find({ title: new RegExp(`^${base}\\s*\\[\\d+]\\s*$`) }).forEach(
|
|
|
+ board => {
|
|
|
+ const m = board.title.match(/^(?<title>.*?)\s*\[(?<num>\d+)]\s*$/);
|
|
|
+ if (m) {
|
|
|
+ const n = parseInt(m.groups.num, 10);
|
|
|
+ num = num < n ? n : num;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ );
|
|
|
+
|
|
|
+ return `${base} [${num + 1}]`;
|
|
|
+};
|
|
|
+
|
|
|
Boards.userSearch = (
|
|
|
userId,
|
|
|
selector = {},
|