From 58d098503bc2d2b591b58b8fd8cb9677eb341b20 Mon Sep 17 00:00:00 2001 From: Dick Choi Date: Wed, 14 Sep 2016 12:36:37 +0900 Subject: [PATCH] add excluding syntax to SearchInput --- browser/main/TopBar/index.js | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/browser/main/TopBar/index.js b/browser/main/TopBar/index.js index ba56645e..1e7f396d 100644 --- a/browser/main/TopBar/index.js +++ b/browser/main/TopBar/index.js @@ -95,7 +95,33 @@ class TopBar extends React.Component { if (search.trim().length === 0) return [] let searchBlocks = search.split(' ') searchBlocks.forEach((block) => { - if (block.match(/^#.+/)) { + if (block.match(/^!#.+/)) { + let tag = block.match(/^!#(.+)/)[1] + let regExp = new RegExp(_.escapeRegExp(tag), 'i') + notes = notes + .filter((note) => { + if (!_.isArray(note.tags)) return false + return note.tags.some((_tag) => { + return _tag.match(regExp) + }) + }) + } else if (block.match(/^!.+/)) { + let block = block.match(/^!(.+)/)[1] + let regExp = new RegExp(_.escapeRegExp(block), 'i') + notes = notes.filter((note) => { + if (!_.isArray(note.tags) || !note.tags.some((_tag) => { + return _tag.match(regExp) + })) { + return true + } + if (note.type === 'SNIPPET_NOTE') { + return !note.description.match(regExp) + } else if (note.type === 'MARKDOWN_NOTE') { + return !note.content.match(regExp) + } + return false + }) + } else if (block.match(/^#.+/)) { let tag = block.match(/#(.+)/)[1] let regExp = new RegExp(_.escapeRegExp(tag), 'i') notes = notes @@ -108,6 +134,11 @@ class TopBar extends React.Component { } else { let regExp = new RegExp(_.escapeRegExp(block), 'i') notes = notes.filter((note) => { + if (_.isArray(note.tags) && note.tags.some((_tag) => { + return _tag.match(regExp) + })) { + return true + } if (note.type === 'SNIPPET_NOTE') { return note.description.match(regExp) } else if (note.type === 'MARKDOWN_NOTE') {