mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 18:32:20 +08:00
df38008c56
Summary: This diff includes a few small things: - Menu: Don't select the first item until the user taps down arrow, and allow the user to use the arrow keys to move up and down through Menu items. - Menu: Make scroll code from MultiselectList re-usable, use in Menu. Now if you use the keys to move to an item that is offscreen it will follow. - Popover: Tapping the button that opened popover should close it - Make sure buttons in toolbars are at least standard height - Re-enable Markdown processing via `grunt docs` - A bit of initial inline documentation for crosjdoc. Need to evaluate whether this is worth doing everywhere. - New `search-playground` package for experimenting with search and search weights. - Swap itemClassProvider for more generic itemPropProvider - Add crojsdoc config file - Export React, because third party packages can't require things from our app - [FEATURE] Bring back static file support in third party packages via `nylas://translate/IMG_20150417_124142.jpg` - Fix invariant error with search bar - [FEATURE] "Show Original" under Message actions - Fix DatabaseView so that many archives at once don't cause problems Test Plan: Run specs Reviewers: evan Reviewed By: evan Differential Revision: https://review.inboxapp.com/D1426
71 lines
1.7 KiB
CoffeeScript
71 lines
1.7 KiB
CoffeeScript
Reflux = require 'reflux'
|
|
{Actions,
|
|
Contact,
|
|
ContactStore} = require 'inbox-exports'
|
|
_ = require 'underscore-plus'
|
|
|
|
# Stores should closely match the needs of a particular part of the front end.
|
|
# For example, we might create a "MessageStore" that observes this store
|
|
# for changes in selectedThread, "DatabaseStore" for changes to the underlying database,
|
|
# and vends up the array used for that view.
|
|
|
|
SearchSuggestionStore = Reflux.createStore
|
|
init: ->
|
|
@_suggestions = []
|
|
@_query = ""
|
|
@_committedQuery = ""
|
|
|
|
@listenTo Actions.searchQueryChanged, @onSearchQueryChanged
|
|
@listenTo Actions.searchQueryCommitted, @onSearchQueryCommitted
|
|
@listenTo Actions.searchBlurred, @onSearchBlurred
|
|
|
|
onSearchQueryChanged: (query) ->
|
|
@_query = query
|
|
@repopulate()
|
|
|
|
onSearchQueryCommitted: (query) ->
|
|
@_query = query
|
|
@_committedQuery = query
|
|
@_suggestions = []
|
|
@trigger()
|
|
|
|
onSearchBlurred: ->
|
|
@_suggestions = []
|
|
@trigger()
|
|
|
|
repopulate: ->
|
|
@_suggestions = []
|
|
term = @_query?[0]
|
|
return @trigger(@) unless term
|
|
|
|
key = Object.keys(term)[0]
|
|
val = term[key]?.toLowerCase()
|
|
return @trigger(@) unless val
|
|
|
|
contactResults = ContactStore.searchContacts(val, limit:10)
|
|
|
|
@_suggestions.push
|
|
label: "Message Contains: #{val}"
|
|
value: [{"all": val}]
|
|
|
|
if contactResults.length
|
|
@_suggestions.push
|
|
divider: 'People'
|
|
|
|
_.each contactResults, (contact) =>
|
|
@_suggestions.push
|
|
contact: contact
|
|
value: [{"participants": contact.email}]
|
|
|
|
@trigger(@)
|
|
|
|
# Exposed Data
|
|
|
|
query: -> @_query
|
|
|
|
committedQuery: -> @_committedQuery
|
|
|
|
suggestions: ->
|
|
@_suggestions
|
|
|
|
module.exports = SearchSuggestionStore
|