diff --git a/admin/app/components/solidus_admin/layout/navigation/account/component.html.erb b/admin/app/components/solidus_admin/layout/navigation/account/component.html.erb index 2a73d7aa677..d114afe0809 100644 --- a/admin/app/components/solidus_admin/layout/navigation/account/component.html.erb +++ b/admin/app/components/solidus_admin/layout/navigation/account/component.html.erb @@ -27,6 +27,15 @@ shadow-base "> + <% available_timezones_for_select = ActiveSupport::TimeZone.all.map(&:name) %> +
  • + <%= autosubmit_select_tag( + "solidus_timezone", + options_for_select(available_timezones_for_select, selected: Time.zone.name), + icon: 'time-zone-line', + ) %> +
  • + <% if (available_locales = Spree.i18n_available_locales).any? %>
  • <%= autosubmit_select_tag( diff --git a/admin/app/components/solidus_admin/users/edit/component.html.erb b/admin/app/components/solidus_admin/users/edit/component.html.erb index 98401c5d7df..ca84d74d39f 100644 --- a/admin/app/components/solidus_admin/users/edit/component.html.erb +++ b/admin/app/components/solidus_admin/users/edit/component.html.erb @@ -29,6 +29,11 @@
    <%= f.text_field(:password_confirmation) %>
    + <% if @user.respond_to?(:timezone) %> +
    + <%= f.select :timezone, ActiveSupport::TimeZone.all.map { |t| [t.name, t.to_s] }, include_blank: t("spree.none") %> +
    + <% end %>
    <%= f.checkbox_row(:spree_role_ids, options: role_options, row_title: "Roles", layout: :subsection) %>
    diff --git a/admin/app/controllers/solidus_admin/base_controller.rb b/admin/app/controllers/solidus_admin/base_controller.rb index 0cbab846afb..7129735d1b6 100644 --- a/admin/app/controllers/solidus_admin/base_controller.rb +++ b/admin/app/controllers/solidus_admin/base_controller.rb @@ -14,6 +14,7 @@ class BaseController < ApplicationController include SolidusAdmin::ControllerHelpers::Theme include SolidusAdmin::ComponentsHelper include SolidusAdmin::AuthenticationAdapters::Backend if defined?(Spree::Backend) + include Spree::Core::ControllerHelpers::Timezone layout :set_layout diff --git a/admin/spec/controllers/solidus_admin/base_controller_spec.rb b/admin/spec/controllers/solidus_admin/base_controller_spec.rb index fd4912092f0..ed270a25f00 100644 --- a/admin/spec/controllers/solidus_admin/base_controller_spec.rb +++ b/admin/spec/controllers/solidus_admin/base_controller_spec.rb @@ -33,7 +33,7 @@ def index end end - context "successful request" do + context "authorized request" do before do user = create(:admin_user, email: "admin@example.com") allow_any_instance_of(SolidusAdmin::BaseController).to receive(:spree_current_user).and_return(user) @@ -43,6 +43,12 @@ def index get :index expect(response.code).to eq "200" end + + it "sets timezone by param" do + get :index, params: {solidus_timezone: "Hawaii"} + expect(session).to have_key(:solidus_timezone) + expect(session[:solidus_timezone]).to eq("Hawaii") + end end describe "layout rendering" do diff --git a/admin/spec/features/users_spec.rb b/admin/spec/features/users_spec.rb index 7b5e2dc6da1..86305e1d43d 100644 --- a/admin/spec/features/users_spec.rb +++ b/admin/spec/features/users_spec.rb @@ -45,6 +45,7 @@ let(:sign_in_date) { DateTime.now } before do + allow_any_instance_of(Spree.user_class).to receive(:try).with(:timezone) { nil } allow_any_instance_of(Spree.user_class).to receive(:try).with(:email).and_call_original allow_any_instance_of(Spree.user_class).to receive(:try).with(:last_sign_in_at).and_return(sign_in_date) end diff --git a/backend/app/controllers/spree/admin/base_controller.rb b/backend/app/controllers/spree/admin/base_controller.rb index 8d634c49228..38f57710010 100644 --- a/backend/app/controllers/spree/admin/base_controller.rb +++ b/backend/app/controllers/spree/admin/base_controller.rb @@ -3,6 +3,8 @@ module Spree module Admin class BaseController < Spree::BaseController + include Spree::Core::ControllerHelpers::Timezone + helper "spree/admin/navigation" layout "spree/layouts/admin" diff --git a/backend/app/views/spree/admin/shared/_navigation.html.erb b/backend/app/views/spree/admin/shared/_navigation.html.erb index 36bb36e72e3..23aa8eea7db 100644 --- a/backend/app/views/spree/admin/shared/_navigation.html.erb +++ b/backend/app/views/spree/admin/shared/_navigation.html.erb @@ -6,6 +6,7 @@ <%= button_tag class: 'btn fa fa-chevron-circle-left', id: 'admin-nav-toggle', type: :button do %> <%= t('spree.minimize_menu') %> <% end %> + <%= render partial: 'spree/admin/shared/timezone_selection' %> <%= render partial: 'spree/admin/shared/locale_selection' %> <%= render partial: 'spree/admin/shared/theme_selection' %> <% if lookup_context.exists?('spree/admin/shared/_navigation_footer') %> diff --git a/backend/app/views/spree/admin/shared/_navigation_solidus_admin.html.erb b/backend/app/views/spree/admin/shared/_navigation_solidus_admin.html.erb index f73c798e4f7..a58e3d09ee1 100644 --- a/backend/app/views/spree/admin/shared/_navigation_solidus_admin.html.erb +++ b/backend/app/views/spree/admin/shared/_navigation_solidus_admin.html.erb @@ -33,7 +33,7 @@ data-legacy-label="<%= 'spree.navigation.switch_to_legacy'.then { t(_1, default: t(_1, locale: :en)) } %>" data-admin-label="<%= 'spree.navigation.switch_to_solidus_admin'.then { t(_1, default: t(_1, locale: :en)) } %>" > - +
  • @@ -49,6 +49,7 @@