Skip to content

Commit

Permalink
Prepopulate quick search #244
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas101 committed Jan 31, 2019
1 parent 7428438 commit 6c20e49
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 23 deletions.
Expand Up @@ -99,6 +99,16 @@ class CommandPaletteSceneContent extends React.Component {
this.searchInputRef = React.createRef()
this.searchResultsRef = React.createRef()
this.search = new CommandPaletteSearchEngine()

// State
const accountState = accountStore.getState()
this.state = {
searchTerm: '',
searchResults: [],
searchResultsByTarget: {},
searchResultsTerm: '',
recentServiceRecords: this.search.generateRecentServiceResults(accountState)
}
}

/* **************************************************************************/
Expand All @@ -121,22 +131,18 @@ class CommandPaletteSceneContent extends React.Component {
// Data lifecycle
/* **************************************************************************/

state = (() => {
return {
searchTerm: '',
searchResults: [],
searchResultsByTarget: {}
}
})()

accountsChanged = (accountState) => {
this.setState({
recentServiceRecords: this.search.generateRecentServiceResults(accountState)
})
this.search.reloadAccounts()
}

resultsUpdated = (evt, results, resultsByTarget) => {
resultsUpdated = (evt, results, resultsByTarget, resultsTerm) => {
this.setState({
searchResults: results,
searchResultsByTarget: resultsByTarget
searchResultsByTarget: resultsByTarget,
searchResultsTerm: resultsTerm
})
}

Expand Down Expand Up @@ -281,16 +287,26 @@ class CommandPaletteSceneContent extends React.Component {
* @param searchTerm: the search term that's in use
* @param searchResults: the full array of search results
* @param searchResultsByTarget: the results listed by target
* @param searchResultsTerm: the term that was used to generate the search results
* @param recentServiceRecords: the recent service records
* @return jsx
*/
renderSearchResults (classes, searchTerm, searchResults, searchResultsByTarget) {
if (!searchTerm) {
return (
<div className={classes.fullDialogHelper}>
<SearchIcon className={classes.fullDialogHelperIcon} />
Type to start searching
</div>
)
renderSearchResults (classes, searchTerm, searchResults, searchResultsByTarget, searchResultsTerm, recentServiceRecords) {
if (!searchResultsTerm) {
if (recentServiceRecords.length) {
return (
<React.Fragment>
{recentServiceRecords.map((res) => this.renderSearchResultItem(res))}
</React.Fragment>
)
} else {
return (
<div className={classes.fullDialogHelper}>
<SearchIcon className={classes.fullDialogHelperIcon} />
Type to start searching
</div>
)
}
}

if (!searchResults.length) {
Expand Down Expand Up @@ -340,7 +356,9 @@ class CommandPaletteSceneContent extends React.Component {
const {
searchTerm,
searchResults,
searchResultsByTarget
searchResultsByTarget,
searchResultsTerm,
recentServiceRecords
} = this.state

return (
Expand All @@ -362,7 +380,14 @@ class CommandPaletteSceneContent extends React.Component {
ref={this.searchResultsRef}
className={classes.searchResults}
dense>
{this.renderSearchResults(classes, searchTerm, searchResults, searchResultsByTarget)}
{this.renderSearchResults(
classes,
searchTerm,
searchResults,
searchResultsByTarget,
searchResultsTerm,
recentServiceRecords
)}
</List>
</DialogContent>
</React.Fragment>
Expand Down
Expand Up @@ -82,6 +82,26 @@ class CommandPaletteSearchEngine extends EventEmitter {
this[privSearchable].accountsDirty = true
}

/**
* Generates a set of recent services
* @param accountState=autoget: the current account state
*/
generateRecentServiceResults (accountState = accountStore.getState()) {
return accountState.lastAccessedServiceIds(false)
.map((serviceId) => {
const service = accountState.getService(serviceId)
if (!service) { return undefined }
return {
item: {
target: SEARCH_TARGETS.SERVICE,
id: serviceId,
parentId: service.parentId
}
}
})
.filter((rec) => !!rec)
}

/* **************************************************************************/
// Searching: Heavy lifting
/* **************************************************************************/
Expand Down Expand Up @@ -230,7 +250,7 @@ class CommandPaletteSearchEngine extends EventEmitter {

// Look for low-cost escapes (part 1)
if (!this[privTerm]) {
this.emit('results-updated', { sender: this }, [], {})
this.emit('results-updated', { sender: this }, [], {}, this[privTerm])
return
}

Expand All @@ -241,13 +261,13 @@ class CommandPaletteSearchEngine extends EventEmitter {
// Look for low-cost excapes (part 2)
if (this[privTerm] === ALL_TERM) {
const all = this[privFuse].list.map((item) => { return { score: 1.0, item: item } })
this.emit('results-updated', { sender: this }, all, this._sortResultsToTargets(all))
this.emit('results-updated', { sender: this }, all, this._sortResultsToTargets(all), this[privTerm])
return
}

// Perform the search
const results = this[privFuse].search(this[privTerm])
this.emit('results-updated', { sender: this }, results, this._sortResultsToTargets(results))
this.emit('results-updated', { sender: this }, results, this._sortResultsToTargets(results), this[privTerm])
}
}

Expand Down

0 comments on commit 6c20e49

Please sign in to comment.