diff --git a/browser/main/HomePage.js b/browser/main/HomePage.js
index 377fd2d6..edc7f887 100644
--- a/browser/main/HomePage.js
+++ b/browser/main/HomePage.js
@@ -6,7 +6,7 @@ import ArticleNavigator from './HomePage/ArticleNavigator'
import ArticleTopBar from './HomePage/ArticleTopBar'
import ArticleList from './HomePage/ArticleList'
import ArticleDetail from './HomePage/ArticleDetail'
-import { findWhere, findIndex, pick } from 'lodash'
+import _, { findWhere, findIndex, pick } from 'lodash'
import keygen from 'boost/keygen'
import api from 'boost/api'
import auth from 'boost/auth'
@@ -14,6 +14,7 @@ import io from 'boost/socket'
const TEXT_FILTER = 'TEXT_FILTER'
const FOLDER_FILTER = 'FOLDER_FILTER'
+const TAG_FILTER = 'TAG_FILTER'
class HomePage extends React.Component {
componentDidMount () {
@@ -83,14 +84,18 @@ function remap (state) {
})
// Filter articles
- let filters = status.search.split(' ').map(key => key.trim()).filter(key => key.length > 0).map(key => {
+ let filters = status.search.split(' ').map(key => key.trim()).filter(key => key.length > 0 && !key.match(/^#$/)).map(key => {
if (key.match(/^in:.+$/)) {
return {type: FOLDER_FILTER, value: key.match(/^in:(.+)$/)[1]}
}
+ if (key.match(/^#(.+)/)) {
+ return {type: TAG_FILTER, value: key.match(/^#(.+)$/)[1]}
+ }
return {type: TEXT_FILTER, value: key}
})
let folderFilters = filters.filter(filter => filter.type === FOLDER_FILTER)
let textFilters = filters.filter(filter => filter.type === TEXT_FILTER)
+ let tagFilters = filters.filter(filter => filter.type === TAG_FILTER)
if (activeUser.Folders != null) {
let targetFolders = activeUser.Folders.filter(folder => {
@@ -110,6 +115,14 @@ function remap (state) {
})
}, articles)
}
+
+ if (tagFilters.length > 0) {
+ articles = tagFilters.reduce((articles, tagFilter) => {
+ return articles.filter(article => {
+ return _.find(article.Tags, tag => tag.name.match(new RegExp(tagFilter.value, 'i')))
+ })
+ }, articles)
+ }
}
// Grab active article
diff --git a/browser/main/HomePage/ArticleDetail.js b/browser/main/HomePage/ArticleDetail.js
index 310b78ac..1b6d187e 100644
--- a/browser/main/HomePage/ArticleDetail.js
+++ b/browser/main/HomePage/ArticleDetail.js
@@ -10,6 +10,7 @@ import Select from 'react-select'
import linkState from 'boost/linkState'
import api from 'boost/api'
import FolderMark from 'boost/components/FolderMark'
+import TagLink from 'boost/components/TagLink'
var modeOptions = aceModes.map(function (mode) {
return {
@@ -86,13 +87,13 @@ export default class ArticleDetail extends React.Component {
renderIdle () {
let { activeArticle, activeUser } = this.props
- let tags = activeArticle.Tags.length > 0 ? activeArticle.Tags.map(tag => {
- return (
- {tag.name}
+ let tags = activeArticle.Tags.length > 0
+ ? activeArticle.Tags.map(tag => {
+ return ()
+ })
+ : (
+ Not tagged yet
)
- }) : (
- Not tagged yet
- )
let folder = findWhere(activeUser.Folders, {id: activeArticle.FolderId})
let folderName = folder != null ? folder.name : '(unknown)'
diff --git a/browser/main/HomePage/ArticleList.js b/browser/main/HomePage/ArticleList.js
index a9657a03..750a9fee 100644
--- a/browser/main/HomePage/ArticleList.js
+++ b/browser/main/HomePage/ArticleList.js
@@ -4,6 +4,7 @@ import ModeIcon from 'boost/components/ModeIcon'
import moment from 'moment'
import { switchArticle, NEW } from 'boost/actions'
import FolderMark from 'boost/components/FolderMark'
+import TagLink from 'boost/components/TagLink'
export default class ArticleList extends React.Component {
handleArticleClick (key) {
@@ -19,7 +20,7 @@ export default class ArticleList extends React.Component {
let articlesEl = articles.map(article => {
let tags = Array.isArray(article.Tags) && article.Tags.length > 0
? article.Tags.map(tag => {
- return ({tag.name})
+ return ()
})
: (Not tagged yet)
diff --git a/browser/main/index.html b/browser/main/index.html
index 9cfdbb4f..eb510dde 100644
--- a/browser/main/index.html
+++ b/browser/main/index.html
@@ -53,7 +53,7 @@
-