Conversation
| q = params.fetch(:q, "") | ||
|
|
||
| if q.blank? || q.length < 3 | ||
| if !turbo_frame_request? && q.length < 3 |
There was a problem hiding this comment.
Для превью тоже имеет смысл подождать, пока пользователь введёт первые символы; ограничение можно "продублировать" на клиенте через Values в контроллере, например (или вообще через стандартные HTML атрибуты).
|
|
||
| reloadFrame() { | ||
| this.previewFrame.src = this.searchUrl; | ||
| this.previewFrame.reload(); |
There was a problem hiding this comment.
А разве нужен отдельный reload()? Turbo Frame, на сколько я помню, отслеживает изменения src и сам обновляется.
| onFrameUpdate() { | ||
| if (this.navigationalElements) { | ||
| this.navigationalElements.forEach((el) => | ||
| el.removeEventListener("turbo:click", this.resetFrame), |
There was a problem hiding this comment.
Хорошая идея — использовать turbo:click. Но навешивать на каждую ссылку не обязательно, можно было добавить только на контейнер (или даже в data-action прописать).
|
|
||
| scope :search, ->(q) { | ||
| where(arel_table[:title].lower.matches("%#{q.downcase}%")) | ||
| q.blank? ? none : where(arel_table[:title].lower.matches("%#{q.downcase}%")) |
There was a problem hiding this comment.
Лучше так (надо использовать фишки скоупов):
| q.blank? ? none : where(arel_table[:title].lower.matches("%#{q.downcase}%")) | |
| where(arel_table[:title].lower.matches("%#{q.downcase}%")) if q.present? |
| "live-search-preview-frame-id-value": :search_results, | ||
| } %> | ||
| <% end %> | ||
| <%= turbo_frame_tag :search_results, class: "nav--search--frame", src: search_path %> |
There was a problem hiding this comment.
А нужен ли тут search_path? Кажется, он будет делать запрос при начальной загрузке страницы.
| return buildUrlWithQuery(this.searchPathValue, { | ||
| [this.searchParamNameValue]: this.query, | ||
| }); |
There was a problem hiding this comment.
Вот это красиво. Вроде и запрос конструируем сами, а вроде и всё контролируется извне.
Реализовать функционал «живого» поиска (search autocomplete), используя технологии Turbo Frames и Stimulus.