@@ -339,11 +339,57 @@ module.exports = React.createClass({
339339 showAll : function ( ) {
340340 this . setState ( { search : '' } )
341341 } ,
342- showOnlySnippets : function ( ) {
343- this . setState ( { search : '$s' } )
342+ toggleSnippetFilter : function ( ) {
343+ var keywords = typeof this . state . search === 'string' ? this . state . search . split ( ' ' ) : [ ]
344+
345+ var usingSnippetFilter = false
346+ var usingBlueprintFilter = false
347+ keywords = keywords . filter ( function ( keyword ) {
348+ if ( keyword === '$b' ) {
349+ usingBlueprintFilter = true
350+ return false
351+ }
352+ if ( keyword === '$s' ) usingSnippetFilter = true
353+ return true
354+ } )
355+
356+ if ( usingSnippetFilter && ! usingBlueprintFilter ) {
357+ keywords = keywords . filter ( function ( keyword ) {
358+ return keyword !== '$s'
359+ } )
360+ }
361+
362+ if ( ! usingSnippetFilter ) {
363+ keywords . unshift ( '$s' )
364+ }
365+
366+ this . setState ( { search : keywords . join ( ' ' ) } )
344367 } ,
345- showOnlyBlueprints : function ( ) {
346- this . setState ( { search : '$b' } )
368+ toggleBlueprintFilter : function ( ) {
369+ var keywords = typeof this . state . search === 'string' ? this . state . search . split ( ' ' ) : [ ]
370+
371+ var usingSnippetFilter = false
372+ var usingBlueprintFilter = false
373+ keywords = keywords . filter ( function ( keyword ) {
374+ if ( keyword === '$s' ) {
375+ usingSnippetFilter = true
376+ return false
377+ }
378+ if ( keyword === '$b' ) usingBlueprintFilter = true
379+ return true
380+ } )
381+
382+ if ( usingBlueprintFilter && ! usingSnippetFilter ) {
383+ keywords = keywords . filter ( function ( keyword ) {
384+ return keyword !== '$b'
385+ } )
386+ }
387+
388+ if ( ! usingBlueprintFilter ) {
389+ keywords . unshift ( '$b' )
390+ }
391+
392+ this . setState ( { search : keywords . join ( ' ' ) } )
347393 } ,
348394 showOnlyWithTag : function ( tag ) {
349395 return function ( ) {
@@ -560,7 +606,7 @@ module.exports = React.createClass({
560606 < PlanetNavigator openLaunchModal = { this . openLaunchModal } openAddUserModal = { this . openAddUserModal }
561607 search = { this . state . search }
562608 showAll = { this . showAll }
563- showOnlySnippets = { this . showOnlySnippets } showOnlyBlueprints = { this . showOnlyBlueprints } currentPlanet = { this . state . currentPlanet } />
609+ toggleSnippetFilter = { this . toggleSnippetFilter } toggleBlueprintFilter = { this . toggleBlueprintFilter } currentPlanet = { this . state . currentPlanet } />
564610
565611 < PlanetArticleList showOnlyWithTag = { this . showOnlyWithTag } ref = 'list' articles = { filteredArticles } />
566612
0 commit comments