identity-vault/app/components/auth_welcome.rb
2025-12-19 12:28:11 -05:00

113 lines
3.1 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class Components::AuthWelcome < Components::Base
include Phlex::Rails::Helpers::DistanceOfTimeInWordsToNow
def initialize(headline:, subtitle:, return_to: nil, login_hint: nil, logo_path: nil, has_background: false)
@headline = headline
@subtitle = subtitle
@return_to = return_to
@login_hint = login_hint
@logo_path = logo_path
@has_background = has_background
end
def view_template
div(class: [ "auth-container", ("has-background" if @has_background) ]) do
render_brand if @logo_path
div(class: "auth-card") do
render_header
render_actions
render_footer
end
end
end
private
def render_brand
div(class: "auth-brand") do
vite_image_tag "images/hc-square.png", alt: "Hack Club logo", class: "brand-logo"
span(class: "brand-plus") { "×" }
vite_image_tag @logo_path, alt: "Logo", class: "brand-logo brand-logo--custom"
end
end
def render_header
header do
h1 { @headline }
small { @subtitle }
end
end
def render_actions
login_url = @return_to ? "/login?return_to=#{CGI.escape(@return_to)}" : "/login"
div(style: "margin: 3rem 0;") do
form(
action: login_url,
method: "post"
) do
input(type: "hidden", name: "authenticity_token", value: form_authenticity_token)
div(style: "margin-bottom: 1rem;") do
input(
type: "email",
name: "email",
placeholder: t("identities.email_placeholder"),
required: true,
autocomplete: "email",
style: "width: 100%;",
value: @login_hint
)
small(style: "color: var(--muted-color); display: block; margin-top: 0.5rem;") do
plain t("logins.welcome.email_help")
end
end
button(
type: "submit",
class: "primary",
style: "width: 100%; margin-top: 1rem;"
) do
plain t("logins.welcome.continue")
whitespace
plain ""
end
end
end
end
def render_footer
footer(class: "welcome-footer") do
p do
plain t("logins.welcome.trouble_help")
a(href: "mailto:auth@hackclub.com") { "auth@hackclub.com" }
plain "."
end
p(class: "welcome-links") do
a(href: "/docs/privacy") { "Privacy" }
plain ""
a(href: "/docs/terms-of-service") { "Terms" }
plain ""
a(href: "/docs/contact") { "Contact" }
end
if Rails.application.config.try(:git_version).present?
span(class: "welcome-version") do
plain "Build "
if Rails.application.config.try(:commit_link).present?
a(href: Rails.application.config.commit_link, target: "_blank") do
Rails.application.config.git_version
end
else
plain Rails.application.config.git_version
end
if Rails.application.config.try(:server_start_time).present?
plain " from #{distance_of_time_in_words_to_now(Rails.application.config.server_start_time)} ago"
end
end
end
end
end
end