mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-12 02:58: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
91 lines
1.9 KiB
CoffeeScript
91 lines
1.9 KiB
CoffeeScript
Reflux = require 'reflux'
|
|
_ = require 'underscore-plus'
|
|
|
|
{DatabaseStore,
|
|
SearchView,
|
|
NamespaceStore,
|
|
FocusedContentStore,
|
|
Actions,
|
|
Utils,
|
|
Thread,
|
|
Message} = require 'inbox-exports'
|
|
|
|
module.exports =
|
|
SearchStore = Reflux.createStore
|
|
init: ->
|
|
@_resetInstanceVars()
|
|
|
|
@listenTo Actions.searchQueryCommitted, @_onSearchCommitted
|
|
@listenTo Actions.searchWeightsChanged, @_onSearchWeightsChanged
|
|
@listenTo DatabaseStore, @_onDataChanged
|
|
@listenTo NamespaceStore, @_onNamespaceChanged
|
|
|
|
_resetInstanceVars: ->
|
|
@_lastQuery = null
|
|
@_searchQuery = null
|
|
@_searchWeights = {"from": 4, "subject": 2}
|
|
|
|
view: ->
|
|
@_view
|
|
|
|
searchWeights: ->
|
|
@_searchWeights
|
|
|
|
searchQuery: ->
|
|
@_searchQuery
|
|
|
|
setView: (view) ->
|
|
@_viewUnlisten() if @_viewUnlisten
|
|
@_view = view
|
|
|
|
if view
|
|
@_viewUnlisten = view.listen ->
|
|
@trigger(@)
|
|
,@
|
|
|
|
@trigger(@)
|
|
|
|
createView: ->
|
|
namespaceId = NamespaceStore.current()?.id
|
|
|
|
if @_searchQuery
|
|
query = JSON.parse(JSON.stringify(@_searchQuery))
|
|
for term in query
|
|
if term['all']
|
|
term['weights'] = @_searchWeights
|
|
|
|
v = new SearchView(query, namespaceId)
|
|
v.setSortOrder('relevance')
|
|
@setView(v)
|
|
else
|
|
@setView(null)
|
|
|
|
Actions.focusInCollection(collection: 'thread', item: null)
|
|
|
|
# Inbound Events
|
|
|
|
_onNamespaceChanged: ->
|
|
@createView()
|
|
|
|
_onSearchCommitted: (query) ->
|
|
@_searchQuery = query
|
|
@createView()
|
|
|
|
_onSearchWeightsChanged: (weights) ->
|
|
@_searchWeights = weights
|
|
|
|
@createViewDebounced ?= _.debounce =>
|
|
@createView()
|
|
, 500
|
|
@createViewDebounced()
|
|
@trigger(@)
|
|
|
|
_onDataChanged: (change) ->
|
|
return unless @_view
|
|
|
|
if change.objectClass is Thread.name
|
|
@_view.invalidate({changed: change.objects, shallow: true})
|
|
|
|
if change.objectClass is Message.name
|
|
threadIds = _.uniq _.map change.objects, (m) -> m.threadId
|
|
@_view.invalidateMetadataFor(threadIds)
|