diff --git a/shopfloor_mobile/static/wms/src/scenario/cluster_picking.js b/shopfloor_mobile/static/wms/src/scenario/cluster_picking.js index b85426a68a..b99d3b2c32 100644 --- a/shopfloor_mobile/static/wms/src/scenario/cluster_picking.js +++ b/shopfloor_mobile/static/wms/src/scenario/cluster_picking.js @@ -7,6 +7,8 @@ import {ScenarioBaseMixin} from "/shopfloor_mobile_base/static/wms/src/scenario/mixins.js"; import {process_registry} from "/shopfloor_mobile_base/static/wms/src/services/process_registry.js"; +// TODO: consider replacing the dynamic "autofocus" in the searchbar by an event. +// At the moment, we need autofocus to be disabled if there's a user popup. const ClusterPicking = { mixins: [ScenarioBaseMixin], template: ` @@ -18,6 +20,7 @@ const ClusterPicking = { v-if="state.on_scan" v-on:found="on_scan" :input_placeholder="search_input_placeholder" + :autofocus="!screen_info.user_popup" /> <get-work v-if="state_is('start')" diff --git a/shopfloor_mobile/static/wms/src/scenario/location_content_transfer.js b/shopfloor_mobile/static/wms/src/scenario/location_content_transfer.js index 371d6152c0..123e0042c3 100644 --- a/shopfloor_mobile/static/wms/src/scenario/location_content_transfer.js +++ b/shopfloor_mobile/static/wms/src/scenario/location_content_transfer.js @@ -7,6 +7,8 @@ import {ScenarioBaseMixin} from "/shopfloor_mobile_base/static/wms/src/scenario/mixins.js"; import {process_registry} from "/shopfloor_mobile_base/static/wms/src/services/process_registry.js"; +// TODO: consider replacing the dynamic "autofocus" in the searchbar by an event. +// At the moment, we need autofocus to be disabled if there's a user popup. const LocationContentTransfer = { mixins: [ScenarioBaseMixin], template: ` @@ -18,6 +20,7 @@ const LocationContentTransfer = { v-if="state.on_scan" v-on:found="on_scan" :input_placeholder="search_input_placeholder" + :autofocus="!screen_info.user_popup" /> <template v-if="state_in(['scan_location']) && state.data.location"> <item-detail-card diff --git a/shopfloor_mobile/static/wms/src/scenario/single_pack_transfer.js b/shopfloor_mobile/static/wms/src/scenario/single_pack_transfer.js index 86117fea66..77c2c0116f 100644 --- a/shopfloor_mobile/static/wms/src/scenario/single_pack_transfer.js +++ b/shopfloor_mobile/static/wms/src/scenario/single_pack_transfer.js @@ -60,6 +60,8 @@ export var SinglePackStatesMixin = { }, }; +// TODO: consider replacing the dynamic "autofocus" in the searchbar by an event. +// At the moment, we need autofocus to be disabled if there's a user popup. const SinglePackTransfer = { mixins: [ScenarioBaseMixin, SinglePackStatesMixin], template: ` @@ -67,8 +69,19 @@ const SinglePackTransfer = { <template v-slot:header> <state-display-info :info="state.display_info" v-if="state.display_info"/> </template> - <searchbar v-if="state_is(initial_state_key)" v-on:found="on_scan" :input_placeholder="search_input_placeholder"></searchbar> - <searchbar v-if="state_is('scan_location')" v-on:found="on_scan" :input_placeholder="search_input_placeholder" :input_data_type="'location'"></searchbar> + <searchbar + v-if="state_is(initial_state_key)" + v-on:found="on_scan" + :autofocus="!screen_info.user_popup" + :input_placeholder="search_input_placeholder" + ></searchbar> + <searchbar + v-if="state_is('scan_location')" + v-on:found="on_scan" + :autofocus="!screen_info.user_popup" + :input_placeholder="search_input_placeholder" + :input_data_type="'location'" + ></searchbar> <div v-if="state.key != 'show_completion_info' && _.result(state, 'data.picking')"> <item-detail-card :key="make_state_component_key(['package', state.data.id])" diff --git a/shopfloor_mobile/static/wms/src/scenario/zone_picking.js b/shopfloor_mobile/static/wms/src/scenario/zone_picking.js index 9b6030c4a1..6cc71f5bdb 100644 --- a/shopfloor_mobile/static/wms/src/scenario/zone_picking.js +++ b/shopfloor_mobile/static/wms/src/scenario/zone_picking.js @@ -7,6 +7,8 @@ import {ScenarioBaseMixin} from "/shopfloor_mobile_base/static/wms/src/scenario/mixins.js"; import {process_registry} from "/shopfloor_mobile_base/static/wms/src/services/process_registry.js"; +// TODO: consider replacing the dynamic "autofocus" in the searchbar by an event. +// At the moment, we need autofocus to be disabled if there's a user popup. const template_mobile = ` <Screen :screen_info="screen_info"> <template v-slot:header> @@ -16,6 +18,7 @@ const template_mobile = ` v-if="state.on_scan" v-on:found="on_scan" :input_placeholder="search_input_placeholder" + :autofocus="!screen_info.user_popup" /> <div v-if="state_is('scan_location')"> diff --git a/shopfloor_mobile_base/static/wms/src/components/searchbar/searchbar.js b/shopfloor_mobile_base/static/wms/src/components/searchbar/searchbar.js index bed590947f..381f6cb851 100644 --- a/shopfloor_mobile_base/static/wms/src/components/searchbar/searchbar.js +++ b/shopfloor_mobile_base/static/wms/src/components/searchbar/searchbar.js @@ -115,7 +115,15 @@ export var Searchbar = Vue.component("searchbar", { }, methods: { capture_focus: function () { - if (this.autofocus) this.$refs.searchbar.focus(); + if (this.autofocus && this.$refs.searchbar) { + // We need to use both "focus" and "click" in combination + // to make sure that the searchbar is fully focused and ready for scanning + // without having to manually tap on it. + // Using simply one or the other is not enough + // to always be able to input any scanned text. + this.$refs.searchbar.focus(); + this.$refs.searchbar.click(); + } }, show_virtual_keyboard: function (elem) { elem.inputMode = this.input_inputmode;