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 @@
-