2024-10-23 11:20:55 -04:00
|
|
|
<%# locals: (form:, user:) %>
|
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
<div class="flex flex-col items-center gap-4" data-controller="profile-image-preview">
|
|
|
|
<div class="relative">
|
|
|
|
<button type="button"
|
|
|
|
data-profile-image-preview-target="clearBtn"
|
|
|
|
data-action="click->profile-image-preview#clearFileInput"
|
|
|
|
class="<%= user.profile_image.attached? ? "" : "hidden" %> z-50 cursor-pointer absolute bottom-0 right-0 w-8 h-8 bg-gray-50 rounded-full flex justify-center items-center border border-white border-2">
|
|
|
|
<%= icon "x", size: "sm" %>
|
|
|
|
</button>
|
2024-10-23 11:20:55 -04:00
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
<div class="relative flex justify-center items-center bg-surface-inset size-26 md:size-24 rounded-full border-primary border border-dashed overflow-hidden">
|
|
|
|
<%# The image preview once user has uploaded a new file %>
|
|
|
|
<div data-profile-image-preview-target="previewImage" class="h-full w-full flex justify-center items-center hidden">
|
|
|
|
<img src="" alt="Preview" class="w-full h-full rounded-full object-cover">
|
|
|
|
</div>
|
2024-10-23 11:20:55 -04:00
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
<%# The placeholder image for empty avatar field %>
|
|
|
|
<div data-profile-image-preview-target="placeholderImage"
|
2025-04-23 10:42:30 -03:00
|
|
|
class="h-full w-full flex justify-center items-center <%= user.profile_image.attached? ? "hidden" : "" %>">
|
2025-05-01 16:47:14 -04:00
|
|
|
<div class="h-full w-full flex justify-center items-center bg-surface-inset">
|
|
|
|
<%= icon "image-plus", size: "lg" %>
|
|
|
|
</div>
|
2024-10-23 11:20:55 -04:00
|
|
|
</div>
|
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
<%# The attached image if user has already uploaded one %>
|
|
|
|
<div data-profile-image-preview-target="attachedImage"
|
2024-10-23 11:20:55 -04:00
|
|
|
class="h-full w-full flex justify-center items-center <%= user.profile_image.attached? ? "" : "hidden" %>">
|
2025-05-01 16:47:14 -04:00
|
|
|
<% if user.profile_image.attached? %>
|
|
|
|
<div class="h-full w-full">
|
|
|
|
<%= render "settings/user_avatar", avatar_url: user.profile_image.url %>
|
|
|
|
</div>
|
|
|
|
<% end %>
|
|
|
|
</div>
|
2024-10-23 11:20:55 -04:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2025-05-01 16:47:14 -04:00
|
|
|
<div class="text-center">
|
2024-10-23 11:20:55 -04:00
|
|
|
<%= form.hidden_field :delete_profile_image, value: "0", data: { profile_image_preview_target: "deleteProfileImage" } %>
|
|
|
|
|
2025-04-30 18:14:22 -04:00
|
|
|
<%= form.label :profile_image, class: "px-3 py-2 rounded-lg text-sm hover:bg-surface-hover border border-secondary inline-flex items-center gap-2 cursor-pointer", data: { profile_image_preview_target: "uploadButton" } do %>
|
|
|
|
<%= icon "camera", data: { profile_image_preview_target: "cameraIcon" } %>
|
2025-04-18 18:53:10 +05:30
|
|
|
<span data-profile-image-preview-target="uploadText">
|
|
|
|
<%= t(".choose") %> <span class="text-secondary"><%= t(".choose_label") %></span>
|
|
|
|
</span>
|
|
|
|
<span data-profile-image-preview-target="changeText" class="hidden" aria-hidden="true">
|
|
|
|
<%= t(".change") %>
|
|
|
|
</span>
|
|
|
|
<% end %>
|
|
|
|
|
|
|
|
<p class="mt-2 text-xs text-secondary"><%= t(".accepted_formats") %></p>
|
2025-04-23 10:42:30 -03:00
|
|
|
|
2024-10-23 11:20:55 -04:00
|
|
|
<%= form.file_field :profile_image,
|
|
|
|
accept: "image/png, image/jpeg",
|
2025-02-13 11:31:07 -05:00
|
|
|
class: "hidden px-3 py-2 bg-gray-50 text-primary rounded-md text-sm font-medium",
|
2024-10-23 11:20:55 -04:00
|
|
|
data: {
|
|
|
|
profile_image_preview_target: "input",
|
|
|
|
action: "change->profile-image-preview#showFileInputPreview"
|
|
|
|
} %>
|
|
|
|
</div>
|
|
|
|
</div>
|