@@ -12,6 +12,7 @@ import { isModalOpen, closeModal } from 'boost/modal'
1212
1313const TEXT_FILTER = 'TEXT_FILTER'
1414const FOLDER_FILTER = 'FOLDER_FILTER'
15+ const FOLDER_EXACT_FILTER = 'FOLDER_EXACT_FILTER'
1516const TAG_FILTER = 'TAG_FILTER'
1617
1718class HomePage extends React . Component {
@@ -135,6 +136,25 @@ class HomePage extends React.Component {
135136 }
136137}
137138
139+ // Ignore invalid key
140+ function ignoreInvalidKey ( key ) {
141+ return key . length > 0 && ! key . match ( / ^ \/ \/ $ / ) && ! key . match ( / ^ \/ $ / ) && ! key . match ( / ^ # $ / )
142+ }
143+
144+ // Build filter object by key
145+ function buildFilter ( key ) {
146+ if ( key . match ( / ^ \/ \/ .+ / ) ) {
147+ return { type : FOLDER_EXACT_FILTER , value : key . match ( / ^ \/ \/ ( .+ ) $ / ) [ 1 ] }
148+ }
149+ if ( key . match ( / ^ \/ .+ / ) ) {
150+ return { type : FOLDER_FILTER , value : key . match ( / ^ \/ ( .+ ) $ / ) [ 1 ] }
151+ }
152+ if ( key . match ( / ^ # ( .+ ) / ) ) {
153+ return { type : TAG_FILTER , value : key . match ( / ^ # ( .+ ) $ / ) [ 1 ] }
154+ }
155+ return { type : TEXT_FILTER , value : key }
156+ }
157+
138158function remap ( state ) {
139159 let { folders, articles, status } = state
140160
@@ -145,24 +165,25 @@ function remap (state) {
145165 let allArticles = articles . slice ( )
146166
147167 // Filter articles
148- let filters = status . search . split ( ' ' ) . map ( key => key . trim ( ) ) . filter ( key => key . length > 0 && ! key . match ( / ^ \/ $ / ) && ! key . match ( / ^ # $ / ) ) . map ( key => {
149- if ( key . match ( / ^ \/ .+ / ) ) {
150- return { type : FOLDER_FILTER , value : key . match ( / ^ \/ ( .+ ) $ / ) [ 1 ] }
151- }
152- if ( key . match ( / ^ # ( .+ ) / ) ) {
153- return { type : TAG_FILTER , value : key . match ( / ^ # ( .+ ) $ / ) [ 1 ] }
154- }
155- return { type : TEXT_FILTER , value : key }
156- } )
168+ let filters = status . search . split ( ' ' )
169+ . map ( key => key . trim ( ) )
170+ . filter ( ignoreInvalidKey )
171+ . map ( buildFilter )
172+
173+ let folderExactFilters = filters . filter ( filter => filter . type === FOLDER_EXACT_FILTER )
157174 let folderFilters = filters . filter ( filter => filter . type === FOLDER_FILTER )
158175 let textFilters = filters . filter ( filter => filter . type === TEXT_FILTER )
159176 let tagFilters = filters . filter ( filter => filter . type === TAG_FILTER )
160177
178+ let targetFolders
161179 if ( folders != null ) {
162- let targetFolders = folders . filter ( folder => {
180+ let exactTargetFolders = folders . filter ( folder => {
181+ return _ . find ( folderExactFilters , filter => folder . name . match ( new RegExp ( `^${ filter . value } $` ) ) )
182+ } )
183+ let fuzzyTargetFolders = folders . filter ( folder => {
163184 return _ . find ( folderFilters , filter => folder . name . match ( new RegExp ( `^${ filter . value } ` ) ) )
164185 } )
165- status . targetFolders = targetFolders
186+ targetFolders = status . targetFolders = exactTargetFolders . concat ( fuzzyTargetFolders )
166187
167188 if ( targetFolders . length > 0 ) {
168189 articles = articles . filter ( article => {
@@ -204,11 +225,10 @@ function remap (state) {
204225 // or Change IDLE MODE
205226 if ( status . mode === CREATE_MODE ) {
206227 let newArticle = _ . findWhere ( articles , { status : 'NEW' } )
207- let FolderKey = folders [ 0 ] . key
208- if ( folderFilters . length > 0 ) {
209- let targetFolder = _ . find ( folders , folder => folder . name . match ( new RegExp ( `^${ folderFilters [ 0 ] . value } ` ) ) )
210- if ( targetFolder != null ) FolderKey = targetFolder . key
211- }
228+ console . log ( 'targetFolders' )
229+ let FolderKey = targetFolders . length > 0
230+ ? targetFolders [ 0 ] . key
231+ : folders [ 0 ] . key
212232
213233 if ( newArticle == null ) {
214234 newArticle = {
0 commit comments