From c97c766c7ceeb9833c82225d707360aba53d1af1 Mon Sep 17 00:00:00 2001 From: Artemiy Solopov Date: Sun, 27 Jul 2025 14:10:10 +0300 Subject: [PATCH] Moved projects selector to a Stimulus controller --- app/javascript/application.js | 4 -- .../projects_selector_controller.js | 14 +++++++ app/javascript/elements/project_selector.js | 40 ------------------- .../application/_projects_selector.html.erb | 12 +++--- 4 files changed, 21 insertions(+), 49 deletions(-) create mode 100644 app/javascript/controllers/projects_selector_controller.js delete mode 100644 app/javascript/elements/project_selector.js diff --git a/app/javascript/application.js b/app/javascript/application.js index 696ae3c..9ae56c5 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -4,7 +4,3 @@ import "controllers" import "trix" import "@rails/actiontext" - -import {ProjectsSelector} from 'elements/project_selector' - -customElements.define('projects-selector', ProjectsSelector) diff --git a/app/javascript/controllers/projects_selector_controller.js b/app/javascript/controllers/projects_selector_controller.js new file mode 100644 index 0000000..28d4d9e --- /dev/null +++ b/app/javascript/controllers/projects_selector_controller.js @@ -0,0 +1,14 @@ +import { Controller } from '@hotwired/stimulus' + +class ProjectsSelectorController extends Controller { + static values = { + frame: String + } + + changeProject(event) { + const href = event.target.value + Turbo.visit(href, {action: 'advance', frame: this.frameValue}) + } +} + +export default ProjectsSelectorController diff --git a/app/javascript/elements/project_selector.js b/app/javascript/elements/project_selector.js deleted file mode 100644 index dba71c4..0000000 --- a/app/javascript/elements/project_selector.js +++ /dev/null @@ -1,40 +0,0 @@ -import {html, css, LitElement} from 'lit' - -export class ProjectsSelector extends LitElement { - static style=css` - slot { - display: none; - } - ` - - static properties = { - frame: {type: String}, - _options: {type: Array, state: true} - } - - render() { - return html` - - - ` - } - - _handleUpdatedElements(e) { - const childNodes = e.target.assignedElements({flatten: true}) - this._options = childNodes.map(e => { - return {name: e.innerText, href: e.getAttribute('href'), selected: !!e.getAttribute('selected')} - }) - } - - _renderOption(option) { - const {name, href, selected} = option - return html`` - } - - _handleSelect(e) { - const href = e.target.value - Turbo.visit(href, {action: 'advance', frame: this.frame}) - } -} diff --git a/app/views/application/_projects_selector.html.erb b/app/views/application/_projects_selector.html.erb index 06772e0..fe17a49 100644 --- a/app/views/application/_projects_selector.html.erb +++ b/app/views/application/_projects_selector.html.erb @@ -1,7 +1,9 @@ <% if current_project %> - - <% all_projects.each do |project| %> - <%= tag.option(project.name, href: project_path(project), selected: current_project == project) %> - <% end %> - +
+ +
<% end %>