From 017ea2dde422c510b87759b821035f712c028e43 Mon Sep 17 00:00:00 2001
From: iDamari <16044414+iDamari@users.noreply.github.com>
Date: Tue, 28 Jan 2025 20:59:45 +0200
Subject: [PATCH 1/2] =?UTF-8?q?feat:=20extend=20Quick=20Lookup=20aura=20co?=
 =?UTF-8?q?mponent=20with=20barcode=20reader=20support.=20=E2=9C=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 .../QuickLightningLookup.cmp                  |  4 +
 .../QuickLightningLookupController.js         |  8 +-
 .../default/aura/quickLookup/quickLookup.cmp  | 14 ++-
 .../aura/quickLookup/quickLookup.design       |  1 +
 .../aura/quickLookup/quickLookupController.js | 19 +++++
 .../fsc_barcodeScanner.html                   |  7 ++
 .../fsc_barcodeScanner/fsc_barcodeScanner.js  | 85 +++++++++++++++++++
 .../fsc_barcodeScanner.js-meta.xml            | 14 +++
 8 files changed, 149 insertions(+), 3 deletions(-)
 create mode 100644 flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.html
 create mode 100644 flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js
 create mode 100644 flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js-meta.xml
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookup.cmp b/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookup.cmp
index 82d848bf6..c9762d209 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookup.cmp
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookup.cmp
@@ -113,6 +113,10 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 	
 	
 
+	
+		
+	
+
 	
 	
 		
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookupController.js b/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookupController.js
index df416f906..48a6816c9 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookupController.js
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/QuickLightningLookup/QuickLightningLookupController.js
@@ -33,7 +33,13 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                 helper.hideDropDown(component);
             }
         }, false));
-
+    },
+    handleInvokeLookup : function(component, event, helper) {
+        const { searchString } = event.getParam("arguments");
+        if(searchString) {
+            document.getElementById(component.getGlobalId() + "_myinput").value = searchString;
+            helper.hlpPerformLookup(component);
+        }
     },
     performLookup : function(component, event, helper) {
         helper.hlpPerformLookup(component);
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.cmp b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.cmp
index 7280ecd55..68f74a574 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.cmp
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.cmp
@@ -23,6 +23,8 @@
 	
 	
 
+	
+
 	
 
@@ -34,14 +36,22 @@
 					{!v.label}
 			
 
-			
-				
+				
 			
+
+			
+				
+				
+				
+			
+
 		
 	
 
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.design b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.design
index 3af1e756c..e34376d13 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.design
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookup.design
@@ -17,5 +17,6 @@
     
     
     
+    
 
 
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
index 829fdafd4..28ec730a3 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
@@ -1,5 +1,24 @@
 ({
     doInit: function (component, event, helper) {
         helper.hlpCheckValidity(component, event);
+    },
+    handleScanSuccess: function (component, event, helper) {
+        component.set('v.errorMessage', '');
+        //component.set("v.filterFieldValue", scannedBarcode);
+        const componentA = component.find('QuickLightningLookup');
+        const scannedBarcode = event.getParam('value');
+        componentA.invokeLookup(scannedBarcode);
+      },
+      handleScanError: function (component, event, helper) {
+        const errorMessage = event.getParam('detail');
+        var toast = $A.get('e.force:showToast');
+        if (toast) {
+          //fire the toast event in Salesforce app and Lightning Experience
+          toast.setParams({
+            title: 'Error!',
+            message: errorMessage
+          });
+          toast.fire();
+        }
     }
 });
\ No newline at end of file
diff --git a/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.html b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.html
new file mode 100644
index 000000000..a2eb7a692
--- /dev/null
+++ b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.html
@@ -0,0 +1,7 @@
+
+  
+    
+  
+
\ No newline at end of file
diff --git a/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js
new file mode 100644
index 000000000..cb1c1ffc9
--- /dev/null
+++ b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js
@@ -0,0 +1,85 @@
+import { LightningElement, api, track } from 'lwc';
+import { ShowToastEvent } from 'lightning/platformShowToastEvent';
+import { getBarcodeScanner } from 'lightning/mobileCapabilities';
+import { FlowAttributeChangeEvent } from 'lightning/flowSupport';
+
+export default class fsc_barcodeScanner extends LightningElement {
+  barcodeScanner;
+  scannerDisabled = false;
+  @track barcodeScannedValue;
+  @api
+  get barcodeScanned() {
+    return this.barcodeScannedValue;
+  }
+  set barcodeScanned(value) {
+    this.barcodeScannedValue = value;
+  }
+
+  connectedCallback() {
+    this.barcodeScanner = getBarcodeScanner();
+    if (this.barcodeScanner == null || !this.barcodeScanner.isAvailable()) {
+      this.scannerDisabled = true;
+    }
+  }
+
+  handleBeginScanClick() {
+    const scanningOptions = {
+      scannerSize: 'XLARGE',
+      cameraFacing: 'BACK',
+      showSuccessCheckMark: true,
+      vibrateOnSuccess: true,
+      manualConfirmation: true,
+      previewBarcodeData: true,
+      enableBulkScan: false,
+      enableMultiScan: false
+    };
+
+    this.barcodeScannedValue = '';
+    if (this.barcodeScanner != null && this.barcodeScanner.isAvailable()) {
+      this.barcodeScanner
+        .scan(scanningOptions)
+        .then((result) => {
+          this.handleScannedBarcodes(result);
+        })
+        .catch((error) => {
+          this.handleError(error);
+        })
+        .finally(() => {
+          this.barcodeScanner.dismiss();
+        });
+    } else {
+      this.showToast('Barcode Scanner Is Not Available', 'Try again from the Salesforce app on a mobile device.', 'error', 'sticky');
+    }
+  }
+
+  handleScannedBarcodes(barcode) {
+    console.log(JSON.stringify(barcode));
+    if (barcode && barcode.length > 0) {
+      const value = barcode[0]?.value; //decodeURIComponent
+      this.barcodeScannedValue = value;
+      this.dispatchEvent(new CustomEvent('scansuccess', { detail: { value } }));
+
+      this.dispatchEvent(new CustomEvent('notifychange', { detail: { value: value } }));
+
+      const attributeChangeEvent = new FlowAttributeChangeEvent('barcodeScanned', value);
+      this.dispatchEvent(attributeChangeEvent);
+    }
+  }
+
+  showToast(title, message, variant, mode) {
+    this.dispatchEvent(
+      new ShowToastEvent({
+        title: title,
+        message: message,
+        variant: variant,
+        mode: mode
+      })
+    );
+  }
+
+  handleError(error) {
+    this.dispatchEvent(new CustomEvent('scanerror', { detail: error }));
+
+    this.showToast('Barcode Scanner Error', JSON.stringify(error), 'error', 'sticky');
+  }
+}
\ No newline at end of file
diff --git a/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js-meta.xml b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js-meta.xml
new file mode 100644
index 000000000..22909cdb7
--- /dev/null
+++ b/flow_screen_components/quickLookup/force-app/main/default/lwc/fsc_barcodeScanner/fsc_barcodeScanner.js-meta.xml
@@ -0,0 +1,14 @@
+
+
+    62.0
+    true
+    BarCode Scanner Action
+    
+        lightning__FlowScreen
+    
+    
+        
+                        
+        
+    
+
\ No newline at end of file
From a700efaf165de8a3818a92eab3361db1241a9506 Mon Sep 17 00:00:00 2001
From: iDamari <16044414+iDamari@users.noreply.github.com>
Date: Wed, 29 Jan 2025 12:53:56 +0200
Subject: [PATCH 2/2] code cleanup
---
 .../main/default/aura/quickLookup/quickLookupController.js    | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
index 28ec730a3..38141e047 100644
--- a/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
+++ b/flow_screen_components/quickLookup/force-app/main/default/aura/quickLookup/quickLookupController.js
@@ -2,9 +2,7 @@
     doInit: function (component, event, helper) {
         helper.hlpCheckValidity(component, event);
     },
-    handleScanSuccess: function (component, event, helper) {
-        component.set('v.errorMessage', '');
-        //component.set("v.filterFieldValue", scannedBarcode);
+    handleScanSuccess: function (component, event, helper) {        
         const componentA = component.find('QuickLightningLookup');
         const scannedBarcode = event.getParam('value');
         componentA.invokeLookup(scannedBarcode);