templates/metier/list.html.twig line 1

  1. {% extends 'base.html.twig' %}
  2. {% block title %}Tous les métiers | DAIP{% endblock %}
  3. {% block body %}
  4. <section class="min-h-screen bg-gradient-to-br from-indigo-50 to-purple-50 py-12 sm:py-20">
  5.     <div class="container mx-auto px-4 w-full max-w-full">
  6.         {# En-tête #}
  7.         <div class="text-center mb-8 sm:mb-12">
  8.             <a href="{{ path('app_home') }}" class="inline-flex items-center text-indigo-600 hover:text-indigo-800 mb-4 transition text-sm">
  9.                 <i class="fas fa-arrow-left mr-2"></i> Retour à l'accueil
  10.             </a>
  11.             <div class="inline-flex items-center rounded-full border border-indigo-200 bg-white px-3 sm:px-4 py-1.5 text-xs sm:text-sm font-semibold text-indigo-600 mb-4 shadow-sm">
  12.                 <i class="fas fa-briefcase mr-2"></i>
  13.                 NOS MÉTIERS
  14.             </div>
  15.             <h1 class="text-2xl sm:text-3xl md:text-4xl font-bold text-slate-900 mb-4">
  16.                 {{ total }} métiers disponibles
  17.             </h1>
  18.         </div>
  19.         {# Filtres #}
  20.         <div class="max-w-3xl mx-auto mb-8 px-2">
  21.             <div class="flex flex-col sm:flex-row gap-3 sm:gap-4">
  22.                 <div class="flex-1">
  23.                     <div class="relative">
  24.                         <i class="fas fa-search absolute left-3 top-1/2 transform -translate-y-1/2 text-slate-400"></i>
  25.                         <input type="text" 
  26.                                id="recherche-input"
  27.                                placeholder="Rechercher un métier..." 
  28.                                value="{{ recherche }}"
  29.                                class="w-full pl-10 pr-4 py-2 sm:py-3 rounded-lg border border-indigo-200 bg-white text-slate-700 text-sm sm:text-base focus:outline-none focus:ring-2 focus:ring-indigo-500">
  30.                     </div>
  31.                 </div>
  32.                 <div class="flex-1">
  33.                     <select id="secteur-filter" class="w-full px-4 py-2 sm:py-3 rounded-lg border border-indigo-200 bg-white text-slate-700 text-sm sm:text-base focus:outline-none focus:ring-2 focus:ring-indigo-500">
  34.                         <option value="">Tous les secteurs</option>
  35.                         {% for secteur in secteurs %}
  36.                             <option value="{{ secteur.id }}" {{ secteurSelectionne == secteur.id ? 'selected' : '' }}>
  37.                                 {{ secteur.nom }}
  38.                             </option>
  39.                         {% endfor %}
  40.                     </select>
  41.                 </div>
  42.             </div>
  43.         </div>
  44.         {# Grille #}
  45.         <div id="metiers-grid" class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4 sm:gap-6">
  46.             {% include 'partials/_metiers_cards.html.twig' with {'metiers': metiers} %}
  47.         </div>
  48.         {# Chargement #}
  49.         <div id="loading" class="hidden text-center py-8">
  50.             <div class="inline-block w-8 h-8 border-4 border-indigo-200 border-t-indigo-600 rounded-full animate-spin"></div>
  51.         </div>
  52.     </div>
  53. </section>
  54. <script>
  55. document.addEventListener('DOMContentLoaded', function() {
  56.     const recherche = document.getElementById('recherche-input');
  57.     const secteur = document.getElementById('secteur-filter');
  58.     
  59.     function recharger() {
  60.         const url = new URL(window.location.href);
  61.         url.searchParams.set('page', '1');
  62.         url.searchParams.set('recherche', recherche.value);
  63.         url.searchParams.set('secteur', secteur.value);
  64.         window.location.href = url.toString();
  65.     }
  66.     
  67.     let timer;
  68.     recherche.addEventListener('input', () => {
  69.         clearTimeout(timer);
  70.         timer = setTimeout(recharger, 500);
  71.     });
  72.     
  73.     secteur.addEventListener('change', recharger);
  74. });
  75. </script>
  76. {% endblock %}