templates/FrontCommun/SejourHotel/availability/vuejs-list-hotels.html.twig line 1

Open in your IDE?
  1. {% include checkCustomTemplate('SejourHotel/availability/vuejs-components/item-hotel.html.twig')  %}
  2. <script>
  3.     let itemHotel2 = itemHotel
  4.     var vjsListHotels = new Vue({
  5.         el: "#vjs-list-hotels",
  6.         data: {
  7.             paginate: ['pagin_hotels'],
  8.             hotels: [],
  9.             BookingCreation: [],
  10.             hotel_loading: 1,
  11.             nbr_room: 0,
  12.             paginate_per: {{ configAffichage.HOTEL.INTERVALLE_PAGINATION|split('default')[1] }},
  13.             progressHotels: 0, // Ajout pour la barre de progression
  14.             totalHotels: 0, // Ajout pour la barre de progression
  15.             loadedHotels: 0, // Ajout pour la barre de progression
  16.             recap: {
  17.                 checkin: '',
  18.                 checkout: '',
  19.                 destination: '',
  20.                 occupations: ''
  21.             }
  22.         },
  23.         computed: {
  24.             filteredHotels() {
  25.                 return this.hotels
  26.                     .filter(htl => {
  27.                         if (typeof vjsSearchNomsHotels === 'undefined' || typeof vjsRefineResult === 'undefined')
  28.                             return true;
  29.                         return (
  30.                             (vjsSearchNomsHotels.filtre_noms.length == 0 || $.inArray(htl.Hotel.Name, vjsSearchNomsHotels.filtre_noms) != -1) &&
  31.                             (vjsRefineResult.filtre_etoiles.length == 0 || $.inArray(htl.DataFiltre.etoiles + '', vjsRefineResult.filtre_etoiles) != -1) &&
  32.                             (vjsRefineResult.filtre_arrangements.length == 0 || ($(htl.DataFiltre.arrangements).filter(vjsRefineResult.filtre_arrangements)).length > 0) &&
  33.                             (vjsRefineResult.filtre_zones.length == 0 || $.inArray(htl.DataFiltre.zone, vjsRefineResult.filtre_zones) != -1) &&
  34.                             (vjsRefineResult.filtre_tags.length == 0 || ($(htl.DataFiltre.tags).filter(vjsRefineResult.filtre_tags)).length > 0) &&
  35.                             (vjsRefineResult.filtre_chambres.length == 0 || ($(htl.DataFiltre.chambres).filter(vjsRefineResult.filtre_chambres)).length > 0) &&
  36.                             (!vjsRefineResult.filtre_recommander || htl.DataFiltre.recommander > 0) &&
  37.                             (!vjsRefineResult.filtre_promo || htl.DataFiltre.promo > 0) &&
  38.                             (!vjsRefineResult.filtre_enfant_gratuit || htl.DataFiltre.enfantGratuit) &&
  39.                             (!vjsRefineResult.filtre_rembourssable || htl.DataFiltre.rembourssable) &&
  40.                             (htl.min_arrangement.min_prices >= vjsRefineResult.filre_prix[0] && htl.min_arrangement.min_prices <= vjsRefineResult.filre_prix[1]) &&
  41.                             (!vjsRefineResult.filtre_disponible || htl.DataFiltre.disponible)
  42.                         )
  43.                     })
  44.                     .sort((a, b) => {
  45.                             if (typeof vjsSortResult === 'undefined')
  46.                                 return true;
  47.                             let trie = vjsSortResult.trie.split('-')[0]
  48.                             let direction = (vjsSortResult.trie.split('-')[1] == 'asc' ? 1 : -1)
  49.                             var a1 = a.DataSort[trie], b1 = b.DataSort[trie];
  50.                             if (a1 == b1) return 0;
  51.                             return a1 > b1 ? 1 * direction : -1 * direction;
  52.                         }
  53.                     );
  54.             }
  55.         },
  56.         methods: {
  57.             scrollToTopHotels() {
  58.                 // Force le scroll à fonctionner avec plusieurs méthodes
  59.                 const self = this;
  60.                 
  61.                 // Attendre que le DOM soit complètement mis à jour
  62.                 this.$nextTick(() => {
  63.                     // Méthode 1: scroll sur l'élément ref
  64.                     if (self.$refs.listeHotels) {
  65.                         try {
  66.                             if (typeof self.$refs.listeHotels.scrollIntoView === 'function') {
  67.                                 self.$refs.listeHotels.scrollIntoView({
  68.                                     behavior: 'smooth',
  69.                                     block: 'start'
  70.                                 });
  71.                             }
  72.                         } catch(e) {
  73.                             console.log('Erreur scrollIntoView:', e);
  74.                         }
  75.                     }
  76.                     
  77.                     // Attendre un peu puis appliquer les fallbacks
  78.                     setTimeout(() => {
  79.                         // Méthode 2: window.scrollTo
  80.                         try {
  81.                             window.scrollTo({
  82.                                 top: 0,
  83.                                 behavior: 'smooth',
  84.                                 left: 0
  85.                             });
  86.                         } catch(e) {
  87.                             console.log('Erreur window.scrollTo:', e);
  88.                         }
  89.                         
  90.                         // Méthode 3: document.documentElement
  91.                         try {
  92.                             document.documentElement.scrollTop = 0;
  93.                             document.documentElement.scrollLeft = 0;
  94.                         } catch(e) {
  95.                             console.log('Erreur documentElement:', e);
  96.                         }
  97.                         
  98.                         // Méthode 4: document.body
  99.                         try {
  100.                             document.body.scrollTop = 0;
  101.                             document.body.scrollLeft = 0;
  102.                         } catch(e) {
  103.                             console.log('Erreur body:', e);
  104.                         }
  105.                         
  106.                         // Méthode 5: jQuery si disponible
  107.                         if (typeof $ !== 'undefined') {
  108.                             try {
  109.                                 $('html, body').animate({scrollTop: 0}, 'slow');
  110.                             } catch(e) {
  111.                                 console.log('Erreur jQuery:', e);
  112.                             }
  113.                         }
  114.                     }, 300);
  115.                 });
  116.             }
  117.         },
  118.         updated() {
  119.             checkEllipsisActive('#vjs-list-hotels')
  120.         },
  121.         watch: {
  122.             filteredHotels(newVal, oldVal) {
  123.                 if (newVal.length !== 0 && oldVal.length === 0) {
  124.                     setTimeout(() => {
  125.                         if (this.$refs.paginator) {
  126.                             this.$refs.paginator.goToPage(1)
  127.                         }
  128.                     }, 50)
  129.                 }
  130.             }
  131.         },
  132.         components: {itemHotel, itemHotel2}
  133.     })
  134. </script>