Skip to content

Commit

Permalink
Merge aac8984 into 047dd22
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredmoody committed Feb 21, 2022
2 parents 047dd22 + aac8984 commit c2b7e7b
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 40 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ yarn-debug.log*

/app/assets/builds/*
!/app/assets/builds/.keep

.tomo
.vscode
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby 2.7.5
1 change: 1 addition & 0 deletions app/assets/stylesheets/application.postcss.css
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
@import 'components/nav.css';
@import 'components/action_bar.css';
@import 'components/table.css';
@import 'components/search.css';

@import 'utilities/display.css';
@import 'utilities/spacing.css';
Expand Down
7 changes: 7 additions & 0 deletions app/assets/stylesheets/components/search.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
form#search .c-loader {
display: none;
}

form#search.loading .c-loader {
display: revert;
}
36 changes: 9 additions & 27 deletions app/javascript/controllers/search_controller.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,18 @@
import { Controller } from '@hotwired/stimulus';

export default class extends Controller {
static targets = ['loader', 'input'];
static targets = ['input'];

connect() {
this.inputTarget.value = this.inputTarget.getAttribute('value');
}
submit(e) {
this.inputTarget.value = this.inputTarget.value.trim();

disconnect() {
this.loaderTarget.classList.add('u-display-none');
this.inputTarget.value = '';
if (this.inputTarget.value.length === 0) {
e.preventDefault();
e.stopPropagation();
}
}

query(event) {
const query = event.target.value.trim();

if (event.key != 'Enter' || query == '') { return; }

this.loaderTarget.classList.remove('u-display-none');
const queryUrl = `/search${query ? `?query=${query}` : ''}`;

Turbo.visit(queryUrl);
this._focusInput();
}

_focusInput() {
document.addEventListener('turbo:load', () => {
const searchElement = document.querySelector('#js-search-input');
const searchValueLength = searchElement.value.length;

searchElement.focus();
searchElement.setSelectionRange(searchValueLength, searchValueLength);
}, { once: true });
loading(e) {
this.element.classList.toggle('loading', e.type == 'turbo:submit-start');
}
}
23 changes: 14 additions & 9 deletions app/views/shared/_search_bar.html.erb
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
<div class='c-input-group o-grid__item' data-controller='search' span@medium='2-6' span='3-5'>
<div class='c-input-group__icon'>
<%= icon_tag 'search', size: 'large' %>
</div>
<input id='js-search-input' class='c-input' data-search-target='input' data-action='keydown->search#query' data-test-id='search_input' value='<%= params[:query] %>' />
<div class='c-input-group__icon u-display-none' data-search-target='loader'>
<%= loader_tag size: 'small' %>
</div>
</div>
<%= form_tag search_path, method: :get, class: 'c-input-group o-grid__item', 'span@medium': '2-6',
span: '3-5', id: 'search',
data: { controller: 'search',
action: 'turbo:submit-start->search#loading turbo:submit-end->search#loading search#submit' } do %>
<div class='c-input-group__icon'>
<%= icon_tag 'search', size: 'large' %>
</div>
<%= text_field_tag 'query', params[:query], class: 'c-input',
autofocus: params[:query].present?, data: { search_target: 'input' } %>
<div class='c-input-group__icon'>
<%= loader_tag size: 'small' %>
</div>
<% end %>

<div class='o-grid__item o-grid__item--justify-end' span@medium='7-7' span='6-7'>
<div data-controller='dropdown' class='c-dropdown' data-test-id='search_bar_menu'>
<span data-action='click->dropdown#show'><%= avatar_tag Current.user %></span>
Expand Down
8 changes: 4 additions & 4 deletions test/system/search_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ class SearchSystemTest < ApplicationSystemTestCase
end

test "show search results" do
fill_in "search_input", with: "artist"
find(:test_id, "search_input").send_keys(:enter)
fill_in "query", with: "artist"
find("#search").send_keys(:enter)

assert_text('Search results for "artist"')
end

test "can not request search when query text is empty" do
fill_in "search_input", with: ""
find(:test_id, "search_input").send_keys(:enter)
fill_in "query", with: ""
find("#search").send_keys(:enter)

assert_no_text('Search results for "artist"')
assert_no_current_path(search_url)
Expand Down

0 comments on commit c2b7e7b

Please sign in to comment.