[Fix] POS customer field is hang while searching customer, make error log if sync has failed (#10607)

diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index f36fdf7..2b3459a 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -320,8 +320,7 @@
 				si_doc.set_posting_time = 1
 				si_doc.customer = get_customer_id(doc)
 				si_doc.due_date = doc.get('posting_date')
-				submit_invoice(si_doc, name, doc)
-				name_list.append(name)
+				name_list = submit_invoice(si_doc, name, doc, name_list)
 			else:
 				name_list.append(name)
 
@@ -475,19 +474,29 @@
 			frappe.db.commit()
 
 
-def submit_invoice(si_doc, name, doc):
+def submit_invoice(si_doc, name, doc, name_list):
 	try:
 		si_doc.insert()
 		si_doc.submit()
 		frappe.db.commit()
+		name_list.append(name)
 	except Exception as e:
 		if frappe.message_log: frappe.message_log.pop()
 		frappe.db.rollback()
-		save_invoice(e, si_doc, name)
+		frappe.log_error(frappe.get_traceback())
+		name_list = save_invoice(e, si_doc, name, name_list)
 
-def save_invoice(e, si_doc, name):
-	if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
-		si_doc.docstatus = 0
-		si_doc.flags.ignore_mandatory = True
-		si_doc.due_date = si_doc.posting_date
-		si_doc.insert()
+	return name_list
+
+def save_invoice(e, si_doc, name, name_list):
+	try:
+		if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
+			si_doc.docstatus = 0
+			si_doc.flags.ignore_mandatory = True
+			si_doc.due_date = si_doc.posting_date
+			si_doc.insert()
+			name_list.append(name)
+	except Exception:
+		frappe.log_error(frappe.get_traceback())
+
+	return name_list
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index e362db0..33b41e9 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -732,14 +732,7 @@
 
 					input = input.toLowerCase();
 					item = this.get_item(item.value);
-					var searchtext =
-						Object.keys(item)
-							.filter(key => ['customer_name', 'customer_group', 'value', 'label', 'email_id', 'phone', 'mobile_no'].includes(key))
-							.map(key => item[key])
-							.join(" ")
-							.toLowerCase();
-
-					return searchtext.includes(input)
+					return item.searchtext.includes(input)
 				},
 				item: function (item, input) {
 					var d = this.get_item(item.value);
@@ -813,7 +806,11 @@
 				territory: c.territory,
 				phone: contact ? contact["phone"] : '',
 				mobile_no: contact ? contact["mobile_no"] : '',
-				email_id: contact ? contact["email_id"] : ''
+				email_id: contact ? contact["email_id"] : '',
+				searchtext: ['customer_name', 'customer_group', 'value',
+					'label', 'email_id', 'phone', 'mobile_no']
+					.map(key => c[key]).join(' ')
+					.toLowerCase()
 			}
 		});