From e19786cbaa1331c448bbfc94fd08e26e2fcd988e Mon Sep 17 00:00:00 2001 From: Andreas Nedbal Date: Fri, 20 Oct 2023 11:34:42 +0200 Subject: [PATCH] Add avatar component --- app/components/avatar_component.html.haml | 4 +++ app/components/avatar_component.rb | 30 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 app/components/avatar_component.html.haml create mode 100644 app/components/avatar_component.rb diff --git a/app/components/avatar_component.html.haml b/app/components/avatar_component.html.haml new file mode 100644 index 00000000..379979c6 --- /dev/null +++ b/app/components/avatar_component.html.haml @@ -0,0 +1,4 @@ +%img{ class: avatar_classes, + alt: alt_text, + src: avatar_image, + loading: :lazy } diff --git a/app/components/avatar_component.rb b/app/components/avatar_component.rb new file mode 100644 index 00000000..c970576a --- /dev/null +++ b/app/components/avatar_component.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class AvatarComponent < ViewComponent::Base + ALLOWED_SIZES = %w[xs sm md lg xl xxl].freeze + + def initialize(user:, size:, classes: []) + @user = user + @size = size if ALLOWED_SIZES.include? size + @classes = classes + end + + private + + def size_to_version(size) + case size + when "xs", "sm" + :small + when "md", "lg" + :medium + when "xl", "xxl" + :large + end + end + + def alt_text = "@#{@user.screen_name}" + + def avatar_classes = @classes.unshift("avatar-#{@size}") + + def avatar_image = @user.profile_picture.url(size_to_version(@size)) +end