Set request timezone to match browser
This commit is contained in:
@@ -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=/`
|
||||
}
|
||||
}
|
||||
@@ -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 %>
|
||||
|
||||
Reference in New Issue
Block a user