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