|
|
|
|
@@ -40,13 +40,13 @@
|
|
|
|
|
<!-- Basic Information -->
|
|
|
|
|
<div class="bg-white rounded-lg border border-gray-200 p-6">
|
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 mb-6">Informations générales</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :name, "Nom de l'événement", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<%= form.text_field :name, class: "w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent", placeholder: "Ex: Soirée d'ouverture", data: { "event-form-target": "name", action: "input->event-form#generateSlug" } %>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :slug, "Slug (URL)", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<%= form.text_field :slug, class: "w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent", placeholder: "soiree-ouverture", data: { "event-form-target": "slug" } %>
|
|
|
|
|
@@ -69,13 +69,13 @@
|
|
|
|
|
<!-- Date & Time -->
|
|
|
|
|
<div class="bg-white rounded-lg border border-gray-200 p-6">
|
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 mb-6">Date et heure</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :start_time, "Date et heure de début", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<%= form.datetime_local_field :start_time, class: "w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" %>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :end_time, "Date et heure de fin", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<%= form.datetime_local_field :end_time, class: "w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" %>
|
|
|
|
|
@@ -86,55 +86,39 @@
|
|
|
|
|
<!-- Venue Information -->
|
|
|
|
|
<div class="bg-white rounded-lg border border-gray-200 p-6">
|
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 mb-6">Lieu de l'événement</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Geocoding Messages Container -->
|
|
|
|
|
<div data-event-form-target="messagesContainer" class="space-y-3 mb-6 empty:mb-0 empty:hidden"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="space-y-6">
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :venue_name, "Nom du lieu", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<%= form.text_field :venue_name, class: "w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent", placeholder: "Ex: Le Grand Rex" %>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
<%= form.label :venue_address, "Adresse complète", class: "block text-sm font-medium text-gray-700 mb-2" %>
|
|
|
|
|
<div class="space-y-2">
|
|
|
|
|
<div class="relative">
|
|
|
|
|
<%= form.text_field :venue_address, class: "w-full px-4 py-2 pr-12 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent", placeholder: "Ex: 1 Boulevard Poissonnière, 75002 Paris", data: { "event-form-target": "address", action: "input->event-form#addressChanged" } %>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Geocoding Loading Spinner -->
|
|
|
|
|
<div data-event-form-target="geocodingSpinner" class="absolute right-3 top-1/2 transform -translate-y-1/2 hidden">
|
|
|
|
|
<div class="w-5 h-5 border-2 border-purple-200 border-t-purple-600 rounded-full animate-spin"></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Location Actions -->
|
|
|
|
|
<div class="flex flex-wrap gap-2">
|
|
|
|
|
<button type="button" data-action="click->event-form#getCurrentLocation" data-event-form-target="getCurrentLocationBtn" class="inline-flex items-center px-3 py-2 text-xs font-medium text-white bg-green-600 rounded-lg hover:bg-green-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">
|
|
|
|
|
<span data-event-form-target="getCurrentLocationIcon">
|
|
|
|
|
<i data-lucide="map-pin" class="w-3 h-3 mr-1"></i>
|
|
|
|
|
</span>
|
|
|
|
|
<span data-event-form-target="getCurrentLocationText">Ma position</span>
|
|
|
|
|
</button>
|
|
|
|
|
<button type="button" data-action="click->event-form#previewLocation" data-event-form-target="previewLocationBtn" class="inline-flex items-center px-3 py-2 text-xs font-medium text-purple-700 bg-purple-50 border border-purple-200 rounded-lg hover:bg-purple-100 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">
|
|
|
|
|
<span data-event-form-target="previewLocationIcon">
|
|
|
|
|
<i data-lucide="map" class="w-3 h-3 mr-1"></i>
|
|
|
|
|
</span>
|
|
|
|
|
<span data-event-form-target="previewLocationText">Prévisualiser</span>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class="mt-2 text-sm text-gray-500">
|
|
|
|
|
<i data-lucide="info" class="w-4 h-4 inline mr-1"></i>
|
|
|
|
|
Les coordonnées GPS seront automatiquement calculées à partir de cette adresse.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Hidden coordinate fields populated by JavaScript geocoding -->
|
|
|
|
|
<%= form.hidden_field :latitude, data: { "event-form-target": "latitude" } %>
|
|
|
|
|
<%= form.hidden_field :longitude, data: { "event-form-target": "longitude" } %>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Map Links Container (shown when address is valid) -->
|
|
|
|
|
<div data-event-form-target="mapLinksContainer" class="empty:hidden bg-gray-50 rounded-lg p-3 border border-gray-200"></div>
|
|
|
|
|
</div>
|
|
|
|
|
@@ -143,12 +127,25 @@
|
|
|
|
|
<!-- Options -->
|
|
|
|
|
<div class="bg-white rounded-lg border border-gray-200 p-6">
|
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 mb-6">Options</h3>
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center">
|
|
|
|
|
<%= form.check_box :featured, class: "h-4 w-4 text-purple-600 border-gray-300 rounded focus:ring-purple-500" %>
|
|
|
|
|
<%= form.label :featured, "Mettre en avant sur la page d'accueil", class: "ml-2 text-sm text-gray-700" %>
|
|
|
|
|
|
|
|
|
|
<div class="space-y-4">
|
|
|
|
|
<div class="flex items-center">
|
|
|
|
|
<%= form.check_box :featured, class: "h-4 w-4 text-purple-600 border-gray-300 rounded focus:ring-purple-500" %>
|
|
|
|
|
<%= form.label :featured, "Mettre en avant sur la page d'accueil", class: "ml-2 text-sm text-gray-700" %>
|
|
|
|
|
</div>
|
|
|
|
|
<p class="text-sm text-gray-500">Les événements mis en avant apparaissent en premier sur la page d'accueil.</p>
|
|
|
|
|
|
|
|
|
|
<div class="flex items-start">
|
|
|
|
|
<%= form.check_box :allow_booking_during_event, class: "h-4 w-4 text-purple-600 border-gray-300 rounded focus:ring-purple-500 mt-1" %>
|
|
|
|
|
<div class="ml-2">
|
|
|
|
|
<%= form.label :allow_booking_during_event, "Autoriser la réservation pendant l'événement", class: "text-sm text-gray-700 font-medium" %>
|
|
|
|
|
<p class="text-sm text-gray-500 mt-1">
|
|
|
|
|
Si activé, les participants pourront acheter des billets même après le début de l'événement.
|
|
|
|
|
Si désactivé, la vente de billets s'arrêtera automatiquement à l'heure de début.
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<p class="mt-2 text-sm text-gray-500">Les événements mis en avant apparaissent en premier sur la page d'accueil.</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Actions -->
|
|
|
|
|
@@ -158,7 +155,7 @@
|
|
|
|
|
Annuler
|
|
|
|
|
<% end %>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center space-x-3">
|
|
|
|
|
<%= form.submit "Créer en brouillon", class: "inline-flex items-center px-6 py-3 bg-gray-600 text-white font-medium rounded-lg hover:bg-gray-700 transition-colors duration-200" %>
|
|
|
|
|
</div>
|
|
|
|
|
@@ -166,4 +163,3 @@
|
|
|
|
|
<% end %>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|