diff --git a/app/components/menu_component.html.erb b/app/components/menu_component.html.erb index 527e5e36..00f19b2a 100644 --- a/app/components/menu_component.html.erb +++ b/app/components/menu_component.html.erb @@ -6,7 +6,7 @@ <% elsif variant == :avatar %> <% end %> diff --git a/app/components/menu_component.rb b/app/components/menu_component.rb index 012b2f62..850031fa 100644 --- a/app/components/menu_component.rb +++ b/app/components/menu_component.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class MenuComponent < ViewComponent::Base - attr_reader :variant, :avatar_url, :placement, :offset, :icon_vertical, :no_padding, :testid + attr_reader :variant, :avatar_url, :initials, :placement, :offset, :icon_vertical, :no_padding, :testid renders_one :button, ->(**button_options, &block) do options_with_target = button_options.merge(data: { menu_target: "button" }) @@ -23,9 +23,10 @@ class MenuComponent < ViewComponent::Base VARIANTS = %i[icon button avatar].freeze - def initialize(variant: "icon", avatar_url: nil, placement: "bottom-end", offset: 12, icon_vertical: false, no_padding: false, testid: nil) + def initialize(variant: "icon", avatar_url: nil, initials: nil, placement: "bottom-end", offset: 12, icon_vertical: false, no_padding: false, testid: nil) @variant = variant.to_sym @avatar_url = avatar_url + @initials = initials @placement = placement @offset = offset @icon_vertical = icon_vertical diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 44a94d12..a54dc088 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -4,6 +4,7 @@ class ApplicationController < ActionController::Base before_action :detect_os before_action :set_default_chat + before_action :set_active_storage_url_options private def detect_os @@ -23,4 +24,12 @@ class ApplicationController < ActionController::Base @last_viewed_chat = Current.user&.last_viewed_chat @chat = @last_viewed_chat end + + def set_active_storage_url_options + ActiveStorage::Current.url_options = { + protocol: request.protocol, + host: request.host, + port: request.optional_port + } + end end diff --git a/app/controllers/concerns/onboardable.rb b/app/controllers/concerns/onboardable.rb index 804667b4..66f89ba9 100644 --- a/app/controllers/concerns/onboardable.rb +++ b/app/controllers/concerns/onboardable.rb @@ -18,7 +18,11 @@ module Onboardable return unless Current.user return unless redirectable_path?(request.path) - if Current.user.onboarded_at.blank? + # Check if trial was started VERY recently (e.g., within the last few seconds) + # If so, assume onboarding was just completed in the previous request, even if onboarded_at appears blank momentarily. + trial_just_started = Current.family.trial_started_at.present? && Current.family.trial_started_at > 10.seconds.ago + + if Current.user.onboarded_at.blank? && !trial_just_started redirect_to onboarding_path elsif !Current.family.subscribed? && !Current.family.trialing? redirect_to upgrade_subscription_path diff --git a/app/models/user.rb b/app/models/user.rb index e997a58f..00dfd5af 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -21,7 +21,7 @@ class User < ApplicationRecord has_one_attached :profile_image do |attachable| attachable.variant :thumbnail, resize_to_fill: [ 300, 300 ], convert: :webp, saver: { quality: 80 } - attachable.variant :small, resize_to_fill: [ 72, 72 ], convert: :webp, saver: { quality: 80 } + attachable.variant :small, resize_to_fill: [ 72, 72 ], convert: :webp, saver: { quality: 80 }, preprocessed: true end validate :profile_image_size diff --git a/app/views/settings/profiles/show.html.erb b/app/views/settings/profiles/show.html.erb index 00858024..fa97c57e 100644 --- a/app/views/settings/profiles/show.html.erb +++ b/app/views/settings/profiles/show.html.erb @@ -41,9 +41,9 @@
<%= Current.family.name %> · <%= Current.family.users.size %>
<% @users.each do |user| %> -<%= user.display_name %>