Просмотр исходного кода

:recyle: adding transitions | emitting events up for preview

tags/0.0.1
toj 4 лет назад
Родитель
Сommit
a90237319a

+ 6
- 3
frontend/src/components/form/button-choice.vue Просмотреть файл

@@ -3,13 +3,13 @@
3 3
     header
4 4
         p selections {{selected}} {{opts}}
5 5
     main(:class="{ 'f-row': opts.length > 2, 'f-col': opts.length <= 2 }")
6
-        button(v-for="op in opts" :class="isSelected(op)" @click="selectOption(op)") {{ op }}
6
+        button(v-for="op in opts" :class="isSelected(op)" @mouseover="hoverOption(op)" @click="selectOption(op)") {{ op }}
7 7
 </template>
8 8
 
9 9
 <script setup>
10 10
 import { defineProps, defineEmits, ref } from 'vue'
11 11
 
12
-const emit = defineEmits(['selected'])
12
+const emit = defineEmits(['selected', 'hovered'])
13 13
 
14 14
 const props = defineProps({
15 15
     opts: {
@@ -20,7 +20,7 @@ const props = defineProps({
20 20
     },
21 21
     prompt: {
22 22
         required: true,
23
-        type: String
23
+        type: String,
24 24
     },
25 25
 })
26 26
 
@@ -40,6 +40,9 @@ const selectOption = optionVal => {
40 40
     sel[props.prompt] = selected.value[0]
41 41
     emit('selected', sel)
42 42
 }
43
+const hoverOption = optionVal => {
44
+    emit('hovered', props.prompt, optionVal)
45
+}
43 46
 </script>
44 47
 
45 48
 <style lang="postcss">

+ 9
- 3
frontend/src/components/form/input-string.vue Просмотреть файл

@@ -9,9 +9,9 @@
9 9
 </template>
10 10
 
11 11
 <script setup>
12
-import { defineProps, defineEmits, ref } from 'vue'
12
+import { defineProps, defineEmits, ref, watch } from 'vue'
13 13
 
14
-const emit = defineEmits(['onButtonSelect'])
14
+const emit = defineEmits(['selected', 'input'])
15 15
 
16 16
 const props = defineProps({
17 17
     default: {
@@ -26,7 +26,7 @@ const props = defineProps({
26 26
     },
27 27
     prompt: {
28 28
         required: true,
29
-        type: String
29
+        type: String,
30 30
     },
31 31
 })
32 32
 
@@ -37,6 +37,12 @@ const selectOption = () => {
37 37
     sel[props.prompt] = input.value
38 38
     emit('selected', sel)
39 39
 }
40
+watch(
41
+    () => input.value,
42
+    () => {
43
+        emit('input', props.prompt, input.value)
44
+    },
45
+)
40 46
 </script>
41 47
 
42 48
 <style lang="postcss">

+ 101
- 46
frontend/src/views/Survey.vue Просмотреть файл

@@ -5,41 +5,53 @@ main.f-col.start.w-full
5 5
     //- ButtonChoice
6 6
     //- InputString
7 7
     header.w-full.f-col
8
-        h3(v-if="!name") hello, what shall i call you?
9
-        h3(v-if="step == 1") What can i help you with, 
10
-            span {{ name }}?
11
-            br
12
-            span I am seeking a ___________.
13
-        h3(v-else-if="step == 2") A {{ seeking }} then. You're in the right place.
14
-            span How would you like to use siimee? 
15
-            br
16
-            span I am ________________.
17
-        h3(v-else-if="[3, 4, 5, 6].includes(step)")
18
-            span I am a
19
-            span(v-if="!role && !experience") _________ _________
20
-            span(v-else-if="role && !experience") _________ {{ role }}
21
-            span(v-else-if="!role && experience") {{ experience }} _________
22
-            span(v-else) {{ experience }} {{ role }}
23
-            span .&nbsp;
24
-            br
25
-            span Looking for a&nbsp;
26
-            span(v-if="!distance && !duration") ________ ________&nbsp;
27
-            span(v-else-if="!distance && duration") {{ duration }} ________&nbsp;
28
-            span(v-else-if="distance && !duration") _________ {{ distance }}&nbsp;
29
-            span(v-else) {{ duration }} {{ distance }}&nbsp;
30
-            span role.
31
-        h3(v-else)
32
-            p My name is {{ name }}.
33
-                span(v-if="pronouns") My pronouns are {{ pronouns }}.
34
-            p I am&nbsp;
35
-                span a {{ experience }}
36
-                span {{ role }}
37
-            p Looking for a {{ duration }},&nbsp;
38
-                span {{ distance }}&nbsp;
39
-                span {{ seeking }}.
40
-            p I am proficient in 
41
-                span(v-for="(lang, i) in language") {{ lang }} &nbsp;
42
-                    span(v-if="i > 1") , 
8
+        Transition(name="slide-up" :duration="1600")
9
+            h3(v-if="step == 0") hello, what shall i call you?
10
+                span(v-for="letter in name" class="fade") {{ letter }}
11
+
12
+            h3(v-else-if="step == 1") What can i help you with, 
13
+                span {{ name }}?
14
+                br
15
+                span I am seeking a 
16
+                    span(v-if="!seeking") ___________.
17
+                    span(v-else class="fade") {{ seeking }}.
18
+            
19
+            h3(v-else-if="step == 2") Looking for a {{ seeking }} then. 
20
+                span You're in the right place. 
21
+                br
22
+                span How would you like to use siimee? 
23
+                br
24
+                span I am 
25
+                    span(v-if="!urgency") ___________.
26
+                    span(v-else class="fade") {{ urgency }}.
27
+            
28
+            h3(v-else-if="[3, 4, 5, 6].includes(step)")
29
+                span I am a 
30
+                span(v-if="!role && !experience" class="fade") _________ _________
31
+                span(v-else-if="role && !experience" class="fade") _________ {{ role }}
32
+                span(v-else-if="!role && experience" class="fade") {{ experience }} _________
33
+                span(v-else class="fade") {{ experience }} {{ role }}
34
+                span .&nbsp;
35
+                br
36
+                span Looking for a&nbsp;
37
+                span(v-if="!distance && !duration" class="fade") ________ ________&nbsp;
38
+                span(v-else-if="!distance && duration" class="fade") {{ duration }} ________&nbsp;
39
+                span(v-else-if="distance && !duration" class="fade") _________ {{ distance }}&nbsp;
40
+                span(v-else class="fade") {{ duration }} {{ distance }}&nbsp;
41
+                span role.
42
+        
43
+            h3(v-else)
44
+                p My name is {{ name }}.
45
+                    span(v-if="pronouns") My pronouns are {{ pronouns }}.
46
+                p I am&nbsp;
47
+                    span a {{ experience }}
48
+                    span {{ role }}
49
+                p Looking for a {{ duration }},&nbsp;
50
+                    span {{ distance }}&nbsp;
51
+                    span {{ seeking }}.
52
+                p I am proficient in 
53
+                    span(v-for="(lang, i) in language") {{ lang }} &nbsp;
54
+                        span(v-if="i > 1") , 
43 55
 
44 56
     article.match.w-full
45 57
         ul.w-full
@@ -52,11 +64,13 @@ main.f-col.start.w-full
52 64
                             :opts="q.responses"
53 65
                             :prompt="q.response_key_prompt"
54 66
                             @selected="onButtonSelect"
67
+                            @hovered="onInputChange"
68
+                            @input="onInputChange"
55 69
                         )
56 70
                         div(v-else-if="step >= priorityQuestions.length")
57 71
                             button(@click="step = 0") save
58 72
                     footer.f-row
59
-                        button(@click="step--").w-full back
73
+                        button(@click="back(q.response_key_prompt)").w-full back
60 74
         //- SurveyForm(v-if="validSurvey && validSurvey.steps" :form="validSurvey.steps" :pid="pid")
61 75
     MainNav(:pid="pid" @show-sidebar="$emit('show-sidebar')")
62 76
 </template>
@@ -84,47 +98,88 @@ export default {
84 98
             step: 0,
85 99
             name: '',
86 100
             seeking: '',
101
+            urgency: '',
87 102
             role: '',
103
+            duration: '',
104
+            distance: '',
88 105
             experience: '',
89 106
             position: '',
90 107
             language: '',
91
-            location: '',
108
+            pronouns: '',
92 109
             zipcode: '',
93 110
         }
94 111
     },
95 112
     computed: {
96 113
         profileQuestions() {
97
-            if(!this.validSurvey) return []
98
-            return this.validSurvey.steps.filter(step => step.response_key_category == 'profile')
114
+            if (!this.validSurvey) return []
115
+            return this.validSurvey.steps.filter(
116
+                step => step.response_key_category == 'profile',
117
+            )
99 118
         },
100 119
         priorityQuestions() {
101
-            if(!this.validSurvey) return []
102
-            return this.validSurvey.steps.filter(step => step.response_key_category != 'profile')
103
-        }
120
+            if (!this.validSurvey) return []
121
+            return this.validSurvey.steps.filter(
122
+                step => step.response_key_category != 'profile',
123
+            )
124
+        },
104 125
     },
105 126
     async created() {
106
-        this.validSurvey = await surveyFactory.createSurvey(allSteps['usa'], possible['usa']['roles'])
127
+        this.validSurvey = await surveyFactory.createSurvey(
128
+            allSteps['usa'],
129
+            possible['usa']['roles'],
130
+        )
107 131
     },
108 132
     methods: {
109 133
         /**
110 134
          * Set state from promptVal key:value object
111 135
          * from button-coice or button-multi
112 136
          */
113
-        onButtonSelect(promptVal){
137
+        onButtonSelect(promptVal) {
114 138
             console.log('promptVal :', promptVal)
115
-            for(const [prompt, val] of Object.entries(promptVal)) {
139
+            for (const [prompt, val] of Object.entries(promptVal)) {
116 140
                 this[prompt] = val
117
-                if(prompt == 'seeking') {
141
+                if (prompt == 'seeking') {
118 142
                     this.validSurvey.setRoleResponses(val)
119 143
                 }
120 144
             }
121 145
             this.step++
122 146
         },
147
+        onInputChange(prompt, val) {
148
+            console.log('prompt :>> ', prompt)
149
+            console.log('val :>> ', val)
150
+            this[prompt] = val
151
+        },
152
+        back(prompt) {
153
+            console.log('prompt :>> ', prompt)
154
+            this[prompt] = ''
155
+            this.step--
156
+        },
123 157
     },
124 158
 }
125 159
 </script>
126 160
 
127 161
 <style lang="postcss">
162
+.slide-up
163
+    &-leave, &-enter
164
+        &-active
165
+            transition-delay: 500ms
166
+            transition-property: opacity, background-color, font-size, transform, color
167
+            transition-timing-function: cubic-bezier(1, 0.3, 0.5, 1)
168
+            transition-duration: 300ms
169
+    &-enter-from, &-leave-to
170
+        opacity: 0
171
+
172
+.fade
173
+    animation: fadeIn 300ms ease-in
174
+
175
+@keyframes fadeIn
176
+    0%
177
+        opacity: 0
178
+    50%
179
+        opacity: 0.5
180
+    100%
181
+        opacity:1
182
+
128 183
 h1
129 184
     color: white
130 185
 

Загрузка…
Отмена
Сохранить