11<template >
22 <!-- eslint-disable max-len -->
33 <div class =" mx-4 sm:mx-16 lg:mx-32" >
4+ <div v-if =" !recommendationsAnalysisDone && !sliderValuesFetched" class =" mx-auto flex items-center justify-center mt-32" >
5+ <img class =" h-36" src =" ../../assets/loading.svg" >
6+ </div >
47 <section v-if =" recommendationsAnalysisDone" class =" mx-auto" >
58 <div class =" sort-button rounded-md text-lg lg:text-2xl w-24 ml-auto" v-on:click =" searchAgain()" >
69 <h1 class =" noSelect capitalize" >←</h1 >
1316 <section v-on:click =" setError(null)"
1417 v-if =" !recommendationsAnalysisDone && sliderValuesFetched"
1518 class =" flex flex-col my-8 md:my-12" >
16- <div ><img src =" ../../assets/search.png" class =" w-20 mb-4 mx-auto" ></div >
17- <div >
18- <FilterSlider
19- v-bind:min =" sliders.age.min"
20- v-bind:max =" sliders.age.max"
21- v-bind:name =" 'age'"
22- v-on:save-filter =" saveFilter" ></FilterSlider >
23- <FilterSlider
24- v-bind:min =" 1"
25- v-bind:max =" 2000"
26- v-bind:unit =" 'km'"
27- v-bind:oneHandle =" true"
28- v-bind:name =" 'distance'"
29- v-on:save-filter =" saveFilter" ></FilterSlider >
30- <FilterSlider
31- v-bind:min =" sliders.popularity.min"
32- v-bind:max =" sliders.popularity.max"
33- v-bind:unit =" 'pts'"
34- v-bind:name =" 'popularity'"
35- v-on:save-filter =" saveFilter" ></FilterSlider >
36- </div >
37- <div >
38- <MultipleFilters
39- v-bind:options =" [
19+ <div ><img src =" ../../assets/search.png" class =" w-20 mb-4 mx-auto" ></div >
20+ <div >
21+ <FilterSlider
22+ v-bind:min =" sliders.age.min"
23+ v-bind:max =" sliders.age.max"
24+ v-bind:name =" 'age'"
25+ v-on:save-filter =" saveFilter" ></FilterSlider >
26+ <FilterSlider
27+ v-bind:min =" 1"
28+ v-bind:max =" 2000"
29+ v-bind:unit =" 'km'"
30+ v-bind:oneHandle =" true"
31+ v-bind:name =" 'distance'"
32+ v-on:save-filter =" saveFilter" ></FilterSlider >
33+ <FilterSlider
34+ v-bind:min =" sliders.popularity.min"
35+ v-bind:max =" sliders.popularity.max"
36+ v-bind:unit =" 'pts'"
37+ v-bind:name =" 'popularity'"
38+ v-on:save-filter =" saveFilter" ></FilterSlider >
39+ </div >
40+ <div >
41+ <MultipleFilters
42+ v-bind:options =" [
4043 'swimming', 'wine', 'reading', 'foodie', 'netflix', 'music', 'yoga', 'golf',
4144 'photography', 'baking', 'shopping', 'outdoors', 'art', 'travel', 'hiking',
4245 'running', 'volunteering', 'cycling', 'climbing', 'tea', 'fishing', 'soccer',
4750 'language exchange', 'sports', 'comedy', 'fashion', 'disney', 'vlogging',
4851 'astrology', 'board games', 'craft beer', 'coffee', 'writer',
4952 ]"
50- v-bind:name =" 'interests'"
51- v-bind:info =" 'If no selected, all are accounted.'"
52- v-on:save-filter-multiple =" saveFilterMultiple" ></MultipleFilters >
53- </div >
53+ v-bind:name =" 'interests'"
54+ v-bind:info =" 'If no selected, all are accounted.'"
55+ v-on:save-filter-multiple =" saveFilterMultiple" ></MultipleFilters >
56+ </div >
5457 <div class =" auth-sub-container-error mx-auto max-w-md" v-if =" error" ><h1 class =" auth-sub-container-error-message" >{{ error }}</h1 ></div >
5558 <div class =" mx-auto w-full max-w-md" >
56- <h1 v-on:click =" search()" class =" onboarding-sub-container-content-button-outline w-48 text-lg font-normal max-w-full bg-purple-matcha w-full text-white-matcha mx-auto" >
59+ <h1 v-if = " !submitted " v- on:click =" search()" class =" onboarding-sub-container-content-button-outline w-48 text-lg font-normal max-w-full bg-purple-matcha w-full text-white-matcha mx-auto" >
5760 Search</h1 >
61+ <div v-else class =" flex items-center justify-center mt-4" >
62+ <img class =" h-12" src =" ../../assets/loading.svg" >
63+ </div >
5864 </div >
5965 </section >
6066 </div >
@@ -103,6 +109,7 @@ export default {
103109 },
104110 recommendationsAnalysisDone: false ,
105111 error: null ,
112+ submitted: false ,
106113 }),
107114 methods: {
108115 saveFilter (... range ) {
@@ -122,15 +129,21 @@ export default {
122129 const sliderRangesRequest = await this .$http .get (' /search/values' );
123130 const values = sliderRangesRequest .data .search_minmax ;
124131 this .sliders .age .min = values .min_age ;
132+ this .filters .age .min = values .min_age ;
125133 if (this .sliders .age .min < 18 ) {
126134 this .sliders .age .min = 18 ;
135+ this .filters .age .min = 18 ;
127136 }
128137 this .sliders .age .max = values .max_age ;
138+ this .filters .age .max = values .max_age ;
129139 this .sliders .popularity .min = values .min_score ;
140+ this .filters .popularity .min = values .min_score ;
130141 this .sliders .popularity .max = values .max_score ;
142+ this .filters .popularity .max = values .max_score ;
131143 this .sliderValuesFetched = true ;
132144 },
133145 async search () {
146+ this .submitted = true ;
134147 const searchRequest = await this .$http .post (' /search' , {
135148 min_age: this .filters .age .min ,
136149 max_age: this .filters .age .max ,
@@ -154,6 +167,7 @@ export default {
154167 }
155168 this .recommendations = searchRequest .data .search_results ;
156169 if (this .recommendations .length === 0 ) {
170+ this .submitted = false ;
157171 this .setError (' 0 profiles found. Please, try expanding your search criteria.' );
158172 return ;
159173 }
@@ -169,6 +183,7 @@ export default {
169183 this .recommendations [i].interests .push (interests[j].name );
170184 }
171185 }
186+ this .submitted = false ;
172187 this .recommendationsAnalysisDone = true ;
173188 this .scrollToTop ();
174189 },
0 commit comments