templates/default/_form_contract.html.twig line 1

Open in your IDE?
  1. <div class="row justify-content-center mx-2 mx-md-4 my-4">
  2. <div class="col-md-10 col-lg-8">
  3. <div class="card shadow px-3">
  4. {# <ul class="nav justify-content-center text-uppercase text-muted py-1">
  5. <li class="nav-item">
  6. <a class="nav-link active" id="search-tab1" data-toggle="tab" href="#tab1" role="tab" aria-controls="tab1" aria-selected="true">
  7. Achat
  8. </a>
  9. </li>
  10. <li class="nav-item">
  11. <a class="nav-link" id="search-tab2" data-toggle="tab" href="#tab2" role="tab" aria-controls="tab2" aria-selected="false">
  12. Location
  13. </a>
  14. </li>
  15. <li class="nav-item">
  16. <a class="nav-link" id="search-tab3" data-toggle="tab" href="#tab3" role="tab" aria-controls="tab3" aria-selected="false">
  17. Gestion
  18. </a>
  19. </li>
  20. </ul>#}
  21. <div class="tab-content pt-3 text-center">
  22. {# <div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="search-tab1">#}
  23. {{ form_start(form, {'action': path('contracts')}) }}
  24. <div class="row text-left">
  25. <div class="col-md-4 py-1">
  26. {{ form_row(form.category, {'attr': {'class': 'border-primary'}}) }}
  27. </div>
  28. <div class="col-md-4 py-1">
  29. {{ form_row(form.location, {'attr': {'class': 'border-primary'}}) }}
  30. </div>
  31. <div class="col-md-4 py-1 slider-inputs">
  32. <div class="mb-3">
  33. {{ form_label(form.distance, '', {'class': 'mb-3'}) }}
  34. </div>
  35. <div class="px-2">
  36. <div id="slider-range-distance"></div>
  37. {{ form_widget(form.distance) }}
  38. </div>
  39. </div>
  40. </div>
  41. <div class="row text-left">
  42. <div class="col-md-4 py-1">
  43. <a class="f20-no-underline slider-collapse" data-toggle="collapse" href="#collapsePrice" role="button" aria-expanded="false" aria-controls="collapsePrice">
  44. {{ form_label(form.minPrice) }} <span class="fas fa-fw fa-caret-right"></span>
  45. </a>
  46. <div class="collapse" id="collapsePrice">
  47. <div class="px-2">
  48. <div class="row slider-inputs">
  49. <div class="col">{{ form_widget(form.minPrice) }}</div>
  50. <div class="col">{{ form_widget(form.maxPrice) }}</div>
  51. </div>
  52. <div id="slider-range-price"></div>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="col-md-4 py-1">
  57. <a class="f20-no-underline slider-collapse" data-toggle="collapse" href="#collapseSpace" role="button" aria-expanded="false" aria-controls="collapseSpace">
  58. {{ form_label(form.minSpace) }} <span class="fas fa-fw fa-caret-right"></span>
  59. </a>
  60. <div class="collapse" id="collapseSpace">
  61. <div class="px-2">
  62. <div class="row slider-inputs">
  63. <div class="col">{{ form_widget(form.minSpace) }}</div>
  64. <div class="col">{{ form_widget(form.maxSpace) }}</div>
  65. </div>
  66. <div id="slider-range-space"></div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="col-md-4 py-1">
  71. <a class="f20-no-underline slider-collapse" data-toggle="collapse" href="#collapseRooms" role="button" aria-expanded="false" aria-controls="collapseRooms">
  72. {{ form_label(form.minRooms) }} <span class="fas fa-fw fa-caret-right"></span>
  73. </a>
  74. <div class="collapse" id="collapseRooms">
  75. <div class="px-2">
  76. <div class="row slider-inputs">
  77. <div class="col">{{ form_widget(form.minRooms) }}</div>
  78. <div class="col">{{ form_widget(form.maxRooms) }}</div>
  79. </div>
  80. <div id="slider-range-rooms"></div>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. <button type="submit" class="btn btn-primary text-uppercase p-3">
  86. <span class="fas fa-search text-white"></span> Rechercher
  87. </button>
  88. {{ form_end(form) }}
  89. {# </div>
  90. <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="search-tab2">
  91. FORMULAIRE 2
  92. </div>
  93. <div class="tab-pane fade" id="tab3" role="tabpanel" aria-labelledby="search-tab3">
  94. FORMULAIRE 3
  95. </div>#}
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <script>
  101. let $sliderDistance = $('#slider-range-distance');
  102. let $sliderPrice = $('#slider-range-price');
  103. let $sliderSpace = $('#slider-range-space');
  104. let $sliderRooms = $('#slider-range-rooms');
  105. let $fieldDistance = $('#contract_estate_search_distance');
  106. let $fieldMinPrice = $('#contract_estate_search_minPrice');
  107. let $fieldMaxPrice = $('#contract_estate_search_maxPrice');
  108. let $fieldMinSpace = $('#contract_estate_search_minSpace');
  109. let $fieldMaxSpace = $('#contract_estate_search_maxSpace');
  110. let $fieldMinRooms = $('#contract_estate_search_minRooms');
  111. let $fieldMaxRooms = $('#contract_estate_search_maxRooms');
  112. function getSliderFieldVal($field) {
  113. return parseInt($field.val().replace(/[a-z  €²+]*/g, ''));
  114. }
  115. function updateSliderDistance(event, ui) {
  116. $fieldDistance.val(ui.value + ' km');
  117. }
  118. function updateSliderPrice(event, ui) {
  119. $fieldMinPrice.val(new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0 }).format(ui.values[0]));
  120. $fieldMaxPrice.val(new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0 }).format(ui.values[1]));
  121. if (ui.values[1] === {{ constant('App\\Repository\\ContractRepository::MAX_PRICE') }}) {
  122. $fieldMaxPrice.val('+ ' + $fieldMaxPrice.val());
  123. }
  124. }
  125. function updateSliderSpace(event, ui) {
  126. $fieldMinSpace.val(ui.values[0] + ' m²');
  127. $fieldMaxSpace.val(ui.values[1] + ' m²');
  128. if (ui.values[1] === {{ constant('App\\Repository\\ContractRepository::MAX_SPACE') }}) {
  129. $fieldMaxSpace.val('+ ' + $fieldMaxSpace.val());
  130. }
  131. }
  132. function updateSliderRooms(event, ui) {
  133. $fieldMinRooms.val(ui.values[0] + ' p');
  134. $fieldMaxRooms.val(ui.values[1] + ' p');
  135. if (ui.values[1] === {{ constant('App\\Repository\\ContractRepository::MAX_ROOMS') }}) {
  136. $fieldMaxRooms.val('+ ' + $fieldMaxRooms.val());
  137. }
  138. }
  139. function initSlider($slider, $minField, $maxField) {
  140. if (($minField.val() !== '' && getSliderFieldVal($minField) != $slider.slider('values', 0))
  141. || ($maxField.val() !== '' && getSliderFieldVal($maxField) != $slider.slider('values', 1))) {
  142. $slider.closest('.collapse').parent().find('label').click();
  143. }
  144. if ($minField.val() === '') {
  145. $minField.val($slider.slider('values', 0));
  146. }
  147. if ($maxField.val() === '') {
  148. $maxField.val($slider.slider('values', 1));
  149. }
  150. $slider.slider('values', [getSliderFieldVal($minField), getSliderFieldVal($maxField)]);
  151. }
  152. $(document).ready(function () {
  153. autocompleteSimple($('#contract_estate_search_location'), '{{ path('xhr_autocomplete_class', {'sClass': 'RefTown', 'sField': 'FullName'}) }}', function (event, ui) {
  154. var aParts = ui.item.value.split(' - ');
  155. var $aCodes = aParts[0].split('-');
  156. $(event.target).val($aCodes[0] + ' - ' + aParts[1]);
  157. return false;
  158. });
  159. $('.slider-collapse').on('click', function () {
  160. $(this).find('svg').toggleClass('fa-caret-down fa-caret-right');
  161. });
  162. $sliderDistance.slider({
  163. range: 'min',
  164. min: 0,
  165. max: {{ constant('App\\Repository\\ContractRepository::MAX_DISTANCE') }},
  166. step: 5,
  167. value: 25,
  168. slide: updateSliderDistance,
  169. change: updateSliderDistance
  170. });
  171. if ($fieldDistance.val() === '') {
  172. $fieldDistance.val($sliderDistance.slider('value'));
  173. }
  174. $sliderDistance.slider('value', getSliderFieldVal($fieldDistance));
  175. $sliderPrice.slider({
  176. range: true,
  177. min: 0,
  178. max: {{ constant('App\\Repository\\ContractRepository::MAX_PRICE') }},
  179. step: 10000,
  180. values: [0, {{ constant('App\\Repository\\ContractRepository::MAX_PRICE') }}],
  181. slide: updateSliderPrice,
  182. change: updateSliderPrice
  183. });
  184. initSlider($sliderPrice, $fieldMinPrice, $fieldMaxPrice);
  185. $sliderSpace.slider({
  186. range: true,
  187. min: 0,
  188. max: {{ constant('App\\Repository\\ContractRepository::MAX_SPACE') }},
  189. step: 10,
  190. values: [0, {{ constant('App\\Repository\\ContractRepository::MAX_SPACE') }}],
  191. slide: updateSliderSpace,
  192. change: updateSliderSpace,
  193. });
  194. initSlider($sliderSpace, $fieldMinSpace, $fieldMaxSpace);
  195. $sliderRooms.slider({
  196. range: true,
  197. min: 1,
  198. max: {{ constant('App\\Repository\\ContractRepository::MAX_ROOMS') }},
  199. step: 1,
  200. values: [0, {{ constant('App\\Repository\\ContractRepository::MAX_ROOMS') }}],
  201. slide: updateSliderRooms,
  202. change: updateSliderRooms,
  203. });
  204. initSlider($sliderRooms, $fieldMinRooms, $fieldMaxRooms);
  205. });
  206. </script>