@@ -6,14 +6,15 @@ import ArticleNavigator from './HomePage/ArticleNavigator'
66import ArticleTopBar from './HomePage/ArticleTopBar'
77import ArticleList from './HomePage/ArticleList'
88import ArticleDetail from './HomePage/ArticleDetail'
9- import { findWhere , findIndex , pick } from 'lodash'
9+ import _ , { findWhere , findIndex , pick } from 'lodash'
1010import keygen from 'boost/keygen'
1111import api from 'boost/api'
1212import auth from 'boost/auth'
1313import io from 'boost/socket'
1414
1515const TEXT_FILTER = 'TEXT_FILTER'
1616const FOLDER_FILTER = 'FOLDER_FILTER'
17+ const TAG_FILTER = 'TAG_FILTER'
1718
1819class HomePage extends React . Component {
1920 componentDidMount ( ) {
@@ -83,14 +84,18 @@ function remap (state) {
8384 } )
8485
8586 // Filter articles
86- let filters = status . search . split ( ' ' ) . map ( key => key . trim ( ) ) . filter ( key => key . length > 0 ) . map ( key => {
87+ let filters = status . search . split ( ' ' ) . map ( key => key . trim ( ) ) . filter ( key => key . length > 0 && ! key . match ( / ^ # $ / ) ) . map ( key => {
8788 if ( key . match ( / ^ i n : .+ $ / ) ) {
8889 return { type : FOLDER_FILTER , value : key . match ( / ^ i n : ( .+ ) $ / ) [ 1 ] }
8990 }
91+ if ( key . match ( / ^ # ( .+ ) / ) ) {
92+ return { type : TAG_FILTER , value : key . match ( / ^ # ( .+ ) $ / ) [ 1 ] }
93+ }
9094 return { type : TEXT_FILTER , value : key }
9195 } )
9296 let folderFilters = filters . filter ( filter => filter . type === FOLDER_FILTER )
9397 let textFilters = filters . filter ( filter => filter . type === TEXT_FILTER )
98+ let tagFilters = filters . filter ( filter => filter . type === TAG_FILTER )
9499
95100 if ( activeUser . Folders != null ) {
96101 let targetFolders = activeUser . Folders . filter ( folder => {
@@ -110,6 +115,14 @@ function remap (state) {
110115 } )
111116 } , articles )
112117 }
118+
119+ if ( tagFilters . length > 0 ) {
120+ articles = tagFilters . reduce ( ( articles , tagFilter ) => {
121+ return articles . filter ( article => {
122+ return _ . find ( article . Tags , tag => tag . name . match ( new RegExp ( tagFilter . value , 'i' ) ) )
123+ } )
124+ } , articles )
125+ }
113126 }
114127
115128 // Grab active article
0 commit comments