diff --git a/app/controllers/static_pages_controller.rb b/app/controllers/static_pages_controller.rb index 1cc3a2cb..8ae84ca5 100644 --- a/app/controllers/static_pages_controller.rb +++ b/app/controllers/static_pages_controller.rb @@ -262,6 +262,21 @@ def filterable_dashboard_data cache_key << params[filter] end + def dashboard + @project = Project.distinct.pluck(:name) + @language = Language.distinct.pluck(:name) + @operating_system = OperatingSystem.distinct.pluck(:name) + @editor = Editor.distinct.pluck(:name) + @category = Category.distinct.pluck(:name) + + # Parse filter selections from params for initial load and deep-linking + @selected_project = params[:project]&.split(",") || [] + @selected_language = params[:language]&.split(",") || [] + @selected_operating_system = params[:operating_system]&.split(",") || [] + @selected_editor = params[:editor]&.split(",") || [] + @selected_category = params[:category]&.split(",") || [] + end + filtered_heartbeats = current_user.heartbeats # Load filter options and apply filters with caching Rails.cache.fetch(cache_key, expires_in: 5.minutes) do diff --git a/app/views/static_pages/_filterable_dashboard.html.erb b/app/views/static_pages/_filterable_dashboard.html.erb index 18096d9b..54608fe4 100644 --- a/app/views/static_pages/_filterable_dashboard.html.erb +++ b/app/views/static_pages/_filterable_dashboard.html.erb @@ -1,410 +1,355 @@ <%= turbo_frame_tag "filterable_dashboard" do %> -
-
- <%= render partial: 'shared/multi_select', locals: { - label: 'Project', - param: 'project', - values: @project, - selected: params[:project] - } %> - - <%= render partial: 'shared/multi_select', locals: { - label: 'Language', - param: 'language', - values: @language, - selected: params[:language] - } %> - - <%= render partial: 'shared/multi_select', locals: { - label: 'OS', - param: 'operating_system', - values: @operating_system, - selected: params[:operating_system] - } %> - - <%= render partial: 'shared/multi_select', locals: { - label: 'Editor', - param: 'editor', - values: @editor, - selected: params[:editor] - } %> - - <%= render partial: 'shared/multi_select', locals: { - label: 'Category', - param: 'category', - values: @category, - selected: params[:category] - } %> -
+
+
+ <%= render partial: "shared/multi_select", locals: { + label: "Project", + param: "project", + values: @project, + selected: @selected_project + } %> + + <%= render partial: "shared/multi_select", locals: { + label: "Language", + param: "language", + values: @language, + selected: @selected_language + } %> + + <%= render partial: "shared/multi_select", locals: { + label: "OS", + param: "operating_system", + values: @operating_system, + selected: @selected_operating_system + } %> + + <%= render partial: "shared/multi_select", locals: { + label: "Editor", + param: "editor", + values: @editor, + selected: @selected_editor + } %> + + <%= render partial: "shared/multi_select", locals: { + label: "Category", + param: "category", + values: @category, + selected: @selected_category + } %> +
- <%= render partial: 'filterable_dashboard_content' %> + <%= render partial: "filterable_dashboard_content" %>
- - - - const ctx = canvas.getContext('2d'); - window.chartInstances['projectTimelineChart'] = new Chart(ctx, { - type: 'bar', - data: { - labels: sortedWeeks.map(week => { - const date = new Date(week); - return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); - }), - datasets: datasets - }, - options: { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - stacked: true, - grid: { - display: false + + -<% end %> +<% end %> \ No newline at end of file diff --git a/app/views/static_pages/_filterable_dashboard_content.html.erb b/app/views/static_pages/_filterable_dashboard_content.html.erb index 2920146d..ce042f46 100644 --- a/app/views/static_pages/_filterable_dashboard_content.html.erb +++ b/app/views/static_pages/_filterable_dashboard_content.html.erb @@ -129,7 +129,7 @@ <% end %>
-

Project Timeline

+

Project Timeline