From 3e390503fc9dbaf02f770f8d433d608bd074e68b Mon Sep 17 00:00:00 2001 From: Ignatz Date: Fri, 18 May 2018 16:41:03 +0200 Subject: first test for custom fields filter --- client/components/sidebar/sidebarFilters.jade | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 273df8c2..ef7b39a2 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -40,6 +40,12 @@ template(name="filterSidebar") | ({{ username }}) if Filter.members.isSelected _id i.fa.fa-check + ul.sidebar-list + each currentBoard.customFields + li + a.name.js-toggle-label-filter + span.sidebar-list-item-description + {{ name }} if Filter.isActive hr a.sidebar-btn.js-clear-all -- cgit v1.2.3-1-g7c22 From 78317ef792c0de7435bbb8a0d3f6b413b2af9ab1 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 14:51:01 +0200 Subject: Filter on custom fields presence --- client/components/sidebar/sidebarFilters.jade | 5 ++++- client/components/sidebar/sidebarFilters.js | 5 +++++ client/lib/filter.js | 11 +++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index ef7b39a2..d1fdf824 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -40,12 +40,15 @@ template(name="filterSidebar") | ({{ username }}) if Filter.members.isSelected _id i.fa.fa-check + hr ul.sidebar-list each currentBoard.customFields li - a.name.js-toggle-label-filter + a.name.js-toggle-custom-fields-filter span.sidebar-list-item-description {{ name }} + if Filter.customFields.isSelected _id + i.fa.fa-check if Filter.isActive hr a.sidebar-btn.js-clear-all diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index f02d3a4a..ba2633de 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -11,6 +11,11 @@ BlazeComponent.extendComponent({ Filter.members.toggle(this.currentData()._id); Filter.resetExceptions(); }, + 'click .js-toggle-custom-fields-filter'(evt) { + evt.preventDefault(); + Filter.customFields.toggle(this.currentData()._id); + Filter.resetExceptions(); + }, 'click .js-clear-all'(evt) { evt.preventDefault(); Filter.reset(); diff --git a/client/lib/filter.js b/client/lib/filter.js index 8129776b..27492125 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -86,8 +86,9 @@ Filter = { // before changing the schema. labelIds: new SetFilter(), members: new SetFilter(), + customFields: new SetFilter(), - _fields: ['labelIds', 'members'], + _fields: ['labelIds', 'members', 'customFields'], // We don't filter cards that have been added after the last filter change. To // implement this we keep the id of these cards in this `_exceptions` fields @@ -111,7 +112,13 @@ Filter = { this._fields.forEach((fieldName) => { const filter = this[fieldName]; if (filter._isActive()) { - filterSelector[fieldName] = filter._getMongoSelector(); + if (fieldName === 'customFields'){ + filterSelector[fieldName] = {_id: filter._getMongoSelector()}; + } + else + { + filterSelector[fieldName] = filter._getMongoSelector(); + } emptySelector[fieldName] = filter._getEmptySelector(); if (emptySelector[fieldName] !== null) { includeEmptySelectors = true; -- cgit v1.2.3-1-g7c22 From cbdb7b4f64f0b620cfa924a1f80a8f1f0191f997 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 15:21:12 +0200 Subject: Correcting constructed mongoSelector --- .eslintrc.json | 2 +- client/lib/filter.js | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 255e00ba..06d3f001 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -32,7 +32,7 @@ "comma-spacing": 2, "comma-style": 2, "eol-last": 2, - "linebreak-style": [2, "unix"], + "linebreak-style": [2, "windows"], "new-parens": 2, "no-lonely-if": 2, "no-multiple-empty-lines": 2, diff --git a/client/lib/filter.js b/client/lib/filter.js index 27492125..d57f3e78 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -10,10 +10,13 @@ function showFilterSidebar() { // Use a "set" filter for a field that is a set of documents uniquely // identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`. +// use "subField" for searching inside object Fields. +// For instance '{ customFields: [{_id : 'field1'}]} (subField would be: _id) class SetFilter { - constructor() { + constructor(subField = '') { this._dep = new Tracker.Dependency(); this._selectedElements = []; + this.subField = subField; } isSelected(val) { @@ -61,7 +64,21 @@ class SetFilter { _getMongoSelector() { this._dep.depend(); - return { $in: this._selectedElements }; + if (this.subField !== '') + { + + const selector = []; + this._selectedElements.forEach((element) => { + const item = []; + item[this.subField] = element; + selector.push(item); + }); + return {$in: selector}; + } + else + { + return { $in: this._selectedElements }; + } } _getEmptySelector() { @@ -86,7 +103,7 @@ Filter = { // before changing the schema. labelIds: new SetFilter(), members: new SetFilter(), - customFields: new SetFilter(), + customFields: new SetFilter('_id'), _fields: ['labelIds', 'members', 'customFields'], @@ -112,13 +129,7 @@ Filter = { this._fields.forEach((fieldName) => { const filter = this[fieldName]; if (filter._isActive()) { - if (fieldName === 'customFields'){ - filterSelector[fieldName] = {_id: filter._getMongoSelector()}; - } - else - { - filterSelector[fieldName] = filter._getMongoSelector(); - } + filterSelector[fieldName] = filter._getMongoSelector(); emptySelector[fieldName] = filter._getEmptySelector(); if (emptySelector[fieldName] !== null) { includeEmptySelectors = true; -- cgit v1.2.3-1-g7c22 From 973a0d93ae0dc59ed40ccb4224c658b0358ebe82 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 15:21:48 +0200 Subject: reverting .eslintrc (i always forget to dont commit this) --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 06d3f001..255e00ba 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -32,7 +32,7 @@ "comma-spacing": 2, "comma-style": 2, "eol-last": 2, - "linebreak-style": [2, "windows"], + "linebreak-style": [2, "unix"], "new-parens": 2, "no-lonely-if": 2, "no-multiple-empty-lines": 2, -- cgit v1.2.3-1-g7c22 From c431af27c25e7fab8a03002792ecc94f4f02923b Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 15:35:25 +0200 Subject: Correcting FIlter search with Multiple Custom Fields --- client/lib/filter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/lib/filter.js b/client/lib/filter.js index d57f3e78..ecc95d40 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -11,7 +11,7 @@ function showFilterSidebar() { // Use a "set" filter for a field that is a set of documents uniquely // identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`. // use "subField" for searching inside object Fields. -// For instance '{ customFields: [{_id : 'field1'}]} (subField would be: _id) +// For instance '{ customFields: [{_id : { $in: ['field1']}}]} (subField would be: _id) class SetFilter { constructor(subField = '') { this._dep = new Tracker.Dependency(); @@ -70,7 +70,7 @@ class SetFilter { const selector = []; this._selectedElements.forEach((element) => { const item = []; - item[this.subField] = element; + item[this.subField] = {$in: [element]}; selector.push(item); }); return {$in: selector}; -- cgit v1.2.3-1-g7c22 From f6d19d2833b322eb54762dae7a8d51d07718ef24 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 15:40:51 +0200 Subject: Filter Sidebar Corrections --- client/components/sidebar/sidebarFilters.jade | 8 +++++++- i18n/en.i18n.json | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index d1fdf824..5f9fcf72 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -42,8 +42,14 @@ template(name="filterSidebar") i.fa.fa-check hr ul.sidebar-list + li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}") + a.name.js-toggle-custom-fields-filter + span.sidebar-list-item-description + | {{_ 'filter-no-custom-fields'}} + if Filter.customFields.isSelected undefined + i.fa.fa-check each currentBoard.customFields - li + li(class="{{#if Filter.customFields.isSelected _id}}active{{/if}}") a.name.js-toggle-custom-fields-filter span.sidebar-list-item-description {{ name }} diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 6006a078..e2d6ddce 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -242,6 +242,7 @@ "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No member", + "filter-no-custom-fields": "No Custom Fields", "filter-on": "Filter is on", "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", "filter-to-selection": "Filter to selection", -- cgit v1.2.3-1-g7c22 From bc0aef3332ff220c7e3cba640bda69bd72567bfd Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 16:06:06 +0200 Subject: More Filter Corrections (Custom Fields) --- client/lib/filter.js | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/client/lib/filter.js b/client/lib/filter.js index ecc95d40..80793db2 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -11,7 +11,7 @@ function showFilterSidebar() { // Use a "set" filter for a field that is a set of documents uniquely // identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`. // use "subField" for searching inside object Fields. -// For instance '{ customFields: [{_id : { $in: ['field1']}}]} (subField would be: _id) +// For instance '{ 'customFields._id': ['field1','field2']} (subField would be: _id) class SetFilter { constructor(subField = '') { this._dep = new Tracker.Dependency(); @@ -64,21 +64,7 @@ class SetFilter { _getMongoSelector() { this._dep.depend(); - if (this.subField !== '') - { - - const selector = []; - this._selectedElements.forEach((element) => { - const item = []; - item[this.subField] = {$in: [element]}; - selector.push(item); - }); - return {$in: selector}; - } - else - { - return { $in: this._selectedElements }; - } + return { $in: this._selectedElements }; } _getEmptySelector() { @@ -128,6 +114,7 @@ Filter = { let includeEmptySelectors = false; this._fields.forEach((fieldName) => { const filter = this[fieldName]; + if (filter.subField !== '') fieldName = `${fieldName}.${filter.subField}`; if (filter._isActive()) { filterSelector[fieldName] = filter._getMongoSelector(); emptySelector[fieldName] = filter._getEmptySelector(); -- cgit v1.2.3-1-g7c22 From 977bce9eb2d367220f30d15e5913d62a2d22c8a0 Mon Sep 17 00:00:00 2001 From: IgnatzHome Date: Sat, 19 May 2018 16:23:18 +0200 Subject: correcting 'no custom fields' --- client/lib/filter.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/lib/filter.js b/client/lib/filter.js index 80793db2..f68c9711 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -114,9 +114,15 @@ Filter = { let includeEmptySelectors = false; this._fields.forEach((fieldName) => { const filter = this[fieldName]; - if (filter.subField !== '') fieldName = `${fieldName}.${filter.subField}`; if (filter._isActive()) { - filterSelector[fieldName] = filter._getMongoSelector(); + if (filter.subField !== '') + { + filterSelector[`${fieldName}.${filter.subField}`] = filter._getMongoSelector(); + } + else + { + filterSelector[fieldName] = filter._getMongoSelector(); + } emptySelector[fieldName] = filter._getEmptySelector(); if (emptySelector[fieldName] !== null) { includeEmptySelectors = true; -- cgit v1.2.3-1-g7c22 From 106b135eba787289a8972da6b679299d15ed105b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 19 May 2018 18:13:43 +0300 Subject: Use NPM 6.0.1 --- Dockerfile | 2 +- snapcraft.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c794f6dc..121d6adc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ ENV NODE_VERSION ${NODE_VERSION:-v8.11.1} ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0.1} ENV USE_EDGE ${USE_EDGE:-false} ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17} -ENV NPM_VERSION ${NPM_VERSION:-5.5.1} +ENV NPM_VERSION ${NPM_VERSION:-6.0.1} ENV FIBERS_VERSION ${FIBERS_VERSION:-2.0.0} ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64} ENV SRC_PATH ${SRC_PATH:-./} diff --git a/snapcraft.yaml b/snapcraft.yaml index 535150b3..d9250392 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -83,7 +83,7 @@ parts: plugin: nodejs node-engine: 8.11.1 node-packages: - - npm@5.5.1 + - npm@6.0.1 - node-gyp - node-pre-gyp - fibers@2.0.0 -- cgit v1.2.3-1-g7c22 From 82f75411318f965b7b3aa53bc9624b0830a1d5fd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 19 May 2018 18:30:29 +0300 Subject: Update translations. --- i18n/en-GB.i18n.json | 1 + i18n/fi.i18n.json | 1 + 2 files changed, 2 insertions(+) diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json index 8f8f5c4e..1182677d 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -242,6 +242,7 @@ "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No member", + "filter-no-custom-fields": "No Custom Fields", "filter-on": "Filter is on", "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", "filter-to-selection": "Filter to selection", diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 2876c75e..935f760c 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -242,6 +242,7 @@ "filter-clear": "Poista suodatin", "filter-no-label": "Ei tunnistetta", "filter-no-member": "Ei jäseniä", + "filter-no-custom-fields": "Ei mukautettuja kenttiä", "filter-on": "Suodatus on päällä", "filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.", "filter-to-selection": "Suodata valintaan", -- cgit v1.2.3-1-g7c22 From 410e5aa28d065508558fdc46fa82bd540d21b97a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 19 May 2018 18:37:02 +0300 Subject: - Filtering by Custom Field - Update to NPM 6.0.1 and MongoDB 3.2.20 Thanks to feuerball11 and xet7 ! --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index adecd17e..7e48154b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# Upcoming Wekan release + +This release adds the following new features: + +* [Filtering by Custom Field](https://github.com/wekan/wekan/pull/1645); +* Update to NPM 6.0.1 and MongoDB 3.2.20. + +Thanks to GitHub users feuerball11 and xet7 for their contributions. + # v0.97 2018-05-19 Wekan release Updated translations. -- cgit v1.2.3-1-g7c22