Skip to content

Commit

Permalink
component/autocomplete: add local completions
Browse files Browse the repository at this point in the history
  • Loading branch information
jibi committed Feb 13, 2014
1 parent 918c84f commit 7cba2e9
Showing 1 changed file with 42 additions and 10 deletions.
52 changes: 42 additions & 10 deletions opal/lissio/component/autocomplete.rb
Expand Up @@ -7,7 +7,8 @@ class Autocomplete < Lissio::Component
class Section < Lissio::Component
class Options
def initialize(&block)
@key = :id
@key = :id
@limit = 10

if block.arity.nonzero?
block.call(self)
Expand All @@ -20,14 +21,22 @@ def title(value = nil)
value ? @title = value : @title
end

def url(value = nil)
value ? @url = value : @url
def local(value = nil)
value ? @local = value : @local
end

def remote(value = nil)
value ? @remote = value : @remote
end

def key(value = nil)
value ? @key = value : @key
end

def limit(value = nil)
value ? @limit = value : @limit
end

def select(&block)
block ? @select = block : @select
end
Expand Down Expand Up @@ -103,10 +112,12 @@ def section(&block)
end

@autocompleters << {
url: options.url,
title: options.title,
select: options.select,
local: options.local,
remote: options.remote,
key: options.key,
limit: options.limit,
select: options.select,
section: section
}
end
Expand All @@ -132,15 +143,25 @@ def query
remove_old_completions

comps = @autocompleters.map do |ac|
url = "#{ac[:url]}?q=#{query.value}"
local_completions = get_local_completions(ac)

Browser::HTTP.get(url).then do |response|
[ac, response]
if local_completions.count < ac[:limit] and ac[:remote]
url = "#{ac[:remote]}?q=#{query.value}"

Browser::HTTP.get(url).then do |response|
[ac, local_completions, response]
end
else
[ac, local_completions, nil]
end
end

Promise.when(*comps).each do |ac, response|
append_completions(ac, response.json)
Promise.when(*comps).each do |ac, completions, response|
if response
completions += response.json.take(ac[:limit] - completions.size)
end

append_completions(ac, completions)
end
end

Expand Down Expand Up @@ -190,6 +211,17 @@ def set_hint(comps, ac)
end
end

def get_local_completions(ac)
return [] unless ac[:local]

key = ac[:key]
q = query.value

ac[:local].select do |comp|
comp[key].match(q)
end.take(ac[:limit])
end

def append_completions(ac, comps)
if comps.empty?
hide_completions unless @some_results
Expand Down

0 comments on commit 7cba2e9

Please sign in to comment.