From 5a289776de5e8f77f134680c8fe54da903419a9b Mon Sep 17 00:00:00 2001
From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Date: Wed, 15 May 2024 09:48:55 +0530
Subject: [PATCH] fix: Widget phone number input country undefined in
onSelectCountry (#9457)
* fix: Widget phone number input country undefined in onSelectCountry
* chore: Minor fix
---
.../widget/components/Form/PhoneInput.vue | 33 +++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/app/javascript/widget/components/Form/PhoneInput.vue b/app/javascript/widget/components/Form/PhoneInput.vue
index 8a37d02c9..c7fafa916 100644
--- a/app/javascript/widget/components/Form/PhoneInput.vue
+++ b/app/javascript/widget/components/Form/PhoneInput.vue
@@ -39,6 +39,9 @@
v-on-clickaway="closeDropdown"
:class="dropdownBackgroundClass"
class="country-dropdown h-48 overflow-y-auto z-10 absolute top-12 px-0 pt-0 pl-1 pr-1 pb-1 rounded shadow-lg"
+ @keydown.up="moveSelectionUp"
+ @keydown.down="moveSelectionDown"
+ @keydown.enter="onSelect"
>
import countries from 'shared/constants/countries.js';
import FluentIcon from 'shared/components/FluentIcon/Index.vue';
-import mentionSelectionKeyboardMixin from 'dashboard/components/widgets/mentions/mentionSelectionKeyboardMixin.js';
import FormulateInputMixin from '@braid/vue-formulate/src/FormulateInputMixin';
import darkModeMixin from 'widget/mixins/darkModeMixin';
@@ -93,7 +95,7 @@ export default {
components: {
FluentIcon,
},
- mixins: [mentionSelectionKeyboardMixin, FormulateInputMixin, darkModeMixin],
+ mixins: [FormulateInputMixin, darkModeMixin],
props: {
placeholder: {
type: String,
@@ -185,6 +187,14 @@ export default {
);
},
},
+ watch: {
+ items(newItems) {
+ if (newItems.length < this.selectedIndex + 1) {
+ // Reset the selected index to 0 if the new items length is less than the selected index.
+ this.selectedIndex = 0;
+ }
+ },
+ },
methods: {
setContextValue(code) {
// This function is used to set the context value.
@@ -235,7 +245,26 @@ export default {
this.scrollToFocusedOrActiveItem(this.focusedOrActiveItem('focus'));
});
},
+ adjustSelection(direction) {
+ if (!this.showDropdown) return;
+ const maxIndex = this.items.length - 1;
+ if (direction === 'up') {
+ this.selectedIndex =
+ this.selectedIndex <= 0 ? maxIndex : this.selectedIndex - 1;
+ } else if (direction === 'down') {
+ this.selectedIndex =
+ this.selectedIndex >= maxIndex ? 0 : this.selectedIndex + 1;
+ }
+ this.adjustScroll();
+ },
+ moveSelectionUp() {
+ this.adjustSelection('up');
+ },
+ moveSelectionDown() {
+ this.adjustSelection('down');
+ },
onSelect() {
+ if (!this.showDropdown || this.selectedIndex === -1) return;
this.onSelectCountry(this.items[this.selectedIndex]);
},
scrollToFocusedOrActiveItem(item) {