feat: Settings page to update profile

This commit is contained in:
kbe
2025-09-11 16:07:25 +02:00
parent f54742b041
commit 91e6425c1e
8 changed files with 165 additions and 4462 deletions

View File

@@ -0,0 +1,115 @@
<div class="min-h-screen bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
<div class="max-w-2xl mx-auto space-y-8">
<!-- Header -->
<div class="text-center">
<%= link_to "/" do %>
<div class="inline-flex items-center justify-center w-16 h-16 bg-gradient-to-br from-purple-600 to-blue-600 rounded-2xl mb-6 mx-auto">
<i data-lucide="calendar" class="w-8 h-8 text-white"></i>
</div>
<% end %>
<h2 class="text-3xl font-bold text-gray-900">Paramètres du profil</h2>
<p class="mt-2 text-gray-600">
Gérez vos informations personnelles et préférences
</p>
</div>
<!-- Profile Form -->
<div class="bg-white py-8 px-6 shadow-xl rounded-2xl">
<h3 class="text-xl font-semibold text-gray-900 mb-6">Informations personnelles</h3>
<%= form_with model: @user, url: settings_path, method: :patch, local: true, html: { class: "space-y-6" } do |f| %>
<% if @user.errors.any? %>
<div class="bg-red-50 border border-red-200 rounded-lg p-4">
<div class="flex">
<i data-lucide="alert-circle" class="w-5 h-5 text-red-400 mt-0.5 mr-3"></i>
<div>
<h3 class="text-sm font-medium text-red-800">Erreurs :</h3>
<ul class="mt-2 text-sm text-red-700 list-disc list-inside">
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
</div>
</div>
<% end %>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<%= f.label :first_name, "Prénom", class: "block text-sm font-semibold text-gray-700 mb-2" %>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i data-lucide="user" class="w-5 h-5 text-gray-400"></i>
</div>
<%= f.text_field :first_name,
class: "block w-full pl-10 pr-3 py-3 border border-gray-300 rounded-xl shadow-sm placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500 transition-colors",
placeholder: "Votre prénom" %>
</div>
</div>
<div>
<%= f.label :last_name, "Nom de famille", class: "block text-sm font-semibold text-gray-700 mb-2" %>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i data-lucide="user" class="w-5 h-5 text-gray-400"></i>
</div>
<%= f.text_field :last_name,
class: "block w-full pl-10 pr-3 py-3 border border-gray-300 rounded-xl shadow-sm placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-purple-500 transition-colors",
placeholder: "Votre nom de famille" %>
</div>
</div>
</div>
<!-- Professional Account Toggle -->
<div class="border-t pt-6">
<h4 class="text-lg font-medium text-gray-900 mb-4">Type de compte</h4>
<div class="bg-gray-50 p-4 rounded-xl">
<div class="flex items-start space-x-3">
<%= f.check_box :is_professionnal,
class: "mt-1 h-5 w-5 text-purple-600 border-gray-300 rounded focus:ring-purple-500" %>
<div class="flex-1">
<%= f.label :is_professionnal, "Compte professionnel",
class: "block text-sm font-medium text-gray-900 cursor-pointer" %>
<p class="mt-1 text-sm text-gray-600">
Les comptes professionnels peuvent créer et gérer des événements.
Cette option vous permet d'accéder aux fonctionnalités de promotion d'événements.
</p>
</div>
</div>
</div>
</div>
<div class="pt-4">
<%= f.button type: "submit", class: "group relative w-full flex justify-center items-center py-3 px-4 border border-transparent text-sm font-semibold rounded-xl text-white bg-gray-900 hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 transition-all duration-200 shadow-lg hover:shadow-xl transform hover:-translate-y-0.5" do %>
<i data-lucide="save" class="w-4 h-4 mr-2"></i>
Enregistrer les modifications
<% end %>
</div>
<% end %>
</div>
<!-- Navigation Links -->
<div class="bg-white py-6 px-6 shadow-xl rounded-2xl">
<h3 class="text-lg font-semibold text-gray-900 mb-4">Gestion du compte</h3>
<div class="space-y-3">
<%= link_to edit_user_registration_path,
class: "flex items-center p-3 text-gray-700 hover:bg-gray-50 rounded-lg transition-colors" do %>
<i data-lucide="key" class="w-5 h-5 mr-3 text-gray-400"></i>
<div>
<div class="font-medium">Sécurité du compte</div>
<div class="text-sm text-gray-500">Modifier l'email et le mot de passe</div>
</div>
<i data-lucide="chevron-right" class="w-5 h-5 ml-auto text-gray-400"></i>
<% end %>
</div>
</div>
<!-- Back Link -->
<div class="text-center">
<%= link_to :back, class: "inline-flex items-center text-purple-600 hover:text-purple-500 transition-colors" do %>
<i data-lucide="arrow-left" class="w-4 h-4 mr-2"></i>
Retour
<% end %>
</div>
</div>
</div>