Set request timezone to match browser

This commit is contained in:
Kevin McConnell
2025-01-27 14:16:15 +00:00
parent 85daf2aecf
commit 94b2c256b9
4 changed files with 31 additions and 2 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
class ApplicationController < ActionController::Base
include Authentication
include Authentication, CurrentTimezone
stale_when_importmap_changes
allow_browser versions: :modern
@@ -0,0 +1,17 @@
module CurrentTimezone
extend ActiveSupport::Concern
included do
around_action :set_current_timezone
end
private
def set_current_timezone(&)
Time.use_zone(timezone_from_cookie, &)
end
def timezone_from_cookie
timezone = cookies[:timezone]
timezone if timezone.present? && ActiveSupport::TimeZone[timezone]
end
end
@@ -0,0 +1,12 @@
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
connect() {
this.#setTimezoneCookie()
}
#setTimezoneCookie() {
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
document.cookie = `timezone=${encodeURIComponent(timezone)}; path=/`
}
}
+1 -1
View File
@@ -19,7 +19,7 @@
<%= yield :head %>
</head>
<body data-controller="lightbox local-time">
<body data-controller="lightbox local-time timezone-cookie">
<header id="header">
<a href="#main-content" class="skip-navigation btn">Skip to main content</a>
<%= yield :header %>