feat: barcode scanner promise to return scanned row. (#31018)
* feat: barcode scanner promise to return scanned row.
* fix: missing reject at alternate code path
diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js
index 3ae1234..d378118 100644
--- a/erpnext/public/js/utils/barcode_scanner.js
+++ b/erpnext/public/js/utils/barcode_scanner.js
@@ -31,30 +31,39 @@
}
process_scan() {
- let me = this;
+ return new Promise((resolve, reject) => {
+ let me = this;
- const input = this.scan_barcode_field.value;
- if (!input) {
- return;
- }
+ const input = this.scan_barcode_field.value;
+ if (!input) {
+ return;
+ }
- frappe
- .call({
- method: this.scan_api,
- args: {
- search_value: input,
- },
- })
- .then((r) => {
- const data = r && r.message;
- if (!data || Object.keys(data).length === 0) {
- this.show_alert(__("Cannot find Item with this Barcode"), "red");
- this.clean_up();
- return;
- }
+ frappe
+ .call({
+ method: this.scan_api,
+ args: {
+ search_value: input,
+ },
+ })
+ .then((r) => {
+ const data = r && r.message;
+ if (!data || Object.keys(data).length === 0) {
+ this.show_alert(__("Cannot find Item with this Barcode"), "red");
+ this.clean_up();
+ reject();
+ return;
+ }
- me.update_table(data);
- });
+ const row = me.update_table(data);
+ if (row) {
+ resolve(row);
+ }
+ else {
+ reject();
+ }
+ });
+ });
}
update_table(data) {
@@ -90,6 +99,7 @@
this.set_batch_no(row, batch_no);
this.set_barcode(row, barcode);
this.clean_up();
+ return row;
}
// batch and serial selector is reduandant when all info can be added by scan