Fix product price and amount global searching
							parent
							
								
									97b1dd7875
								
							
						
					
					
						commit
						fe14f28994
					
				|  | @ -16,7 +16,7 @@ const addSchemas = () => { | ||||||
|     ajv.addFormat('emailAddress', emailRegex); |     ajv.addFormat('emailAddress', emailRegex); | ||||||
| 
 | 
 | ||||||
|     // Amount format
 |     // Amount format
 | ||||||
|     const amountRegex = /^[1-9]\d*(\.\d+)?$/; |     const amountRegex = /^\d+\.\d\d$/; | ||||||
|     ajv.addFormat('amount', amountRegex); |     ajv.addFormat('amount', amountRegex); | ||||||
| 
 | 
 | ||||||
|     ajv.addKeyword('isNotEmpty', { |     ajv.addKeyword('isNotEmpty', { | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
|             "type": "string" |             "type": "string" | ||||||
|         }, |         }, | ||||||
|         "productPrice": { |         "productPrice": { | ||||||
|             "type": "number", |             "type": "string", | ||||||
|             "format": "amount" |             "format": "amount" | ||||||
|         }, |         }, | ||||||
|         "productDescription": { |         "productDescription": { | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ | ||||||
|             "type": "string" |             "type": "string" | ||||||
|         }, |         }, | ||||||
|         "productPrice": { |         "productPrice": { | ||||||
|             "type": "number", |             "type": "string", | ||||||
|             "format": "amount" |             "format": "amount" | ||||||
|         }, |         }, | ||||||
|         "productDescription": { |         "productDescription": { | ||||||
|  |  | ||||||
|  | @ -652,8 +652,14 @@ $(document).ready(function (){ | ||||||
|             $('#global-search-results').empty(); |             $('#global-search-results').empty(); | ||||||
|             $('#global-search-results').addClass('invisible'); |             $('#global-search-results').addClass('invisible'); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         let minLength = 3; | ||||||
|  |         if(/^\d*\.?\d*$/.test($('#global-search-value').val())){ | ||||||
|  |             minLength = 1; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Search when 3 or more characters are entered
 |         // Search when 3 or more characters are entered
 | ||||||
|         if($('#global-search-value').val().length > 3){ |         if($('#global-search-value').val().length > minLength){ | ||||||
|             $('#global-search').html('<span class="fa fa-spinner fa-spin"></span>'); |             $('#global-search').html('<span class="fa fa-spinner fa-spin"></span>'); | ||||||
|             globalSearch(); |             globalSearch(); | ||||||
|         } |         } | ||||||
|  | @ -685,34 +691,40 @@ function globalSearch(){ | ||||||
|         let hasResult = false; |         let hasResult = false; | ||||||
|         res.customers.forEach((value) => { |         res.customers.forEach((value) => { | ||||||
|             hasResult = true; |             hasResult = true; | ||||||
|             let result = '<li class="list-group-item global-result text-center" data-url="/admin/customer/view/' + value._id + '">'; |             const result = ` | ||||||
|             result += '<div class="row">'; |             <li class="list-group-item global-result text-center" data-url="/admin/customer/view/${value._id}"> | ||||||
|             result += '<div class="col global-result-type gr-click"><i class="fas fa-users"></i> Customer</div>'; |                 <div class="row"> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + value.firstName + ' ' + value.lastName + '</div>'; |                 <div class="col global-result-type gr-click"><i class="fas fa-users"></i> Customer</div> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + value.email + '</div>'; |                 <div class="col global-result-detail gr-click">${value.firstName} ${value.lastName}</div> | ||||||
|             result += '</div></li>'; |                 <div class="col global-result-detail gr-click">${value.email}</div> | ||||||
|  |                 </div> | ||||||
|  |             </li>`; | ||||||
|             $('#global-search-results').append(result); |             $('#global-search-results').append(result); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         res.orders.forEach((value) => { |         res.orders.forEach((value) => { | ||||||
|             hasResult = true; |             hasResult = true; | ||||||
|             let result = '<li class="list-group-item global-result text-center" data-url="/admin/order/view/' + value._id + '">'; |             const result = ` | ||||||
|             result += '<div class="row">'; |             <li class="list-group-item global-result text-center" data-url="/admin/order/view/${value._id}"> | ||||||
|             result += '<div class="col global-result-type gr-click"><i class="fas fa-cube"></i> Order</div>'; |                 <div class="row"> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + value.orderFirstname + ' ' + value.orderLastname + '</div>'; |                     <div class="col global-result-type gr-click"><i class="fas fa-cube"></i> Order</div> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + value.orderEmail + '</div>'; |                     <div class="col global-result-detail gr-click">${value.orderFirstname} ${value.orderLastname}</div> | ||||||
|             result += '</div></li>'; |                     <div class="col global-result-detail gr-click">${value.orderEmail}</div> | ||||||
|  |                 </div> | ||||||
|  |             </li>`; | ||||||
|             $('#global-search-results').append(result); |             $('#global-search-results').append(result); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         res.products.forEach((value) => { |         res.products.forEach((value) => { | ||||||
|             hasResult = true; |             hasResult = true; | ||||||
|             let result = '<li class="list-group-item global-result text-center" data-url="/admin/product/edit/' + value._id + '">'; |             const result = | ||||||
|             result += '<div class="row">'; |             `<li class="list-group-item global-result text-center" data-url="/admin/product/edit/${value._id}">
 | ||||||
|             result += '<div class="col global-result-type gr-click"><i class="fas fa-box-open"></i> Product</div>'; |                 <div class="row"> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + value.productTitle + '</div>'; |                     <div class="col global-result-type gr-click"><i class="fas fa-box-open"></i> Product</div> | ||||||
|             result += '<div class="col global-result-detail gr-click">' + numeral(value.productPrice).format('0.00') + '</div>'; |                     <div class="col global-result-detail gr-click">${value.productTitle}</div> | ||||||
|             result += '</div></li>'; |                     <div class="col global-result-detail gr-click">${$('#currencySymbol').val()}${numeral(value.productPrice).format('0.00')}</div> | ||||||
|  |                 </div> | ||||||
|  |             </li>`; | ||||||
|             $('#global-search-results').append(result); |             $('#global-search-results').append(result); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -555,8 +555,8 @@ router.post('/admin/searchall', restrict, async (req, res, next) => { | ||||||
|         orderQuery.orderEmail = searchValue; |         orderQuery.orderEmail = searchValue; | ||||||
|     }else if(numericRegex.test(req.body.searchValue)){ |     }else if(numericRegex.test(req.body.searchValue)){ | ||||||
|         // If a numeric value is detected
 |         // If a numeric value is detected
 | ||||||
|         orderQuery.amount = common.cleanAmount(req.body.searchValue); |         orderQuery.amount = req.body.searchValue; | ||||||
|         productQuery.productPrice = common.cleanAmount(req.body.searchValue); |         productQuery.productPrice = req.body.searchValue; | ||||||
|     }else{ |     }else{ | ||||||
|         // String searches
 |         // String searches
 | ||||||
|         customerQuery.$or = [ |         customerQuery.$or = [ | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ router.post('/admin/product/insert', restrict, checkAccess, async (req, res) => | ||||||
|     const doc = { |     const doc = { | ||||||
|         productPermalink: req.body.productPermalink, |         productPermalink: req.body.productPermalink, | ||||||
|         productTitle: common.cleanHtml(req.body.productTitle), |         productTitle: common.cleanHtml(req.body.productTitle), | ||||||
|         productPrice: common.safeParseInt(req.body.productPrice), |         productPrice: req.body.productPrice, | ||||||
|         productDescription: common.cleanHtml(req.body.productDescription), |         productDescription: common.cleanHtml(req.body.productDescription), | ||||||
|         productPublished: common.convertBool(req.body.productPublished), |         productPublished: common.convertBool(req.body.productPublished), | ||||||
|         productTags: req.body.productTags, |         productTags: req.body.productTags, | ||||||
|  | @ -237,7 +237,7 @@ router.post('/admin/product/update', restrict, checkAccess, async (req, res) => | ||||||
|         productId: req.body.productId, |         productId: req.body.productId, | ||||||
|         productPermalink: req.body.productPermalink, |         productPermalink: req.body.productPermalink, | ||||||
|         productTitle: common.cleanHtml(req.body.productTitle), |         productTitle: common.cleanHtml(req.body.productTitle), | ||||||
|         productPrice: common.safeParseInt(req.body.productPrice), |         productPrice: req.body.productPrice, | ||||||
|         productDescription: common.cleanHtml(req.body.productDescription), |         productDescription: common.cleanHtml(req.body.productDescription), | ||||||
|         productPublished: common.convertBool(req.body.productPublished), |         productPublished: common.convertBool(req.body.productPublished), | ||||||
|         productTags: req.body.productTags, |         productTags: req.body.productTags, | ||||||
|  |  | ||||||
|  | @ -205,7 +205,7 @@ test('[Success] Add a product', async t => { | ||||||
|     const product = { |     const product = { | ||||||
|         productPermalink: 'test-jacket', |         productPermalink: 'test-jacket', | ||||||
|         productTitle: 'Test Jacket', |         productTitle: 'Test Jacket', | ||||||
|         productPrice: 100, |         productPrice: '100.00', | ||||||
|         productDescription: 'Test desc', |         productDescription: 'Test desc', | ||||||
|         productPublished: true, |         productPublished: true, | ||||||
|         productTags: 'organic, jacket', |         productTags: 'organic, jacket', | ||||||
|  | @ -235,7 +235,7 @@ test('[Fail] Add a product - Duplicate permalink', async t => { | ||||||
|     const product = { |     const product = { | ||||||
|         productPermalink: 'test-jacket', |         productPermalink: 'test-jacket', | ||||||
|         productTitle: 'Test Jacket - blue', |         productTitle: 'Test Jacket - blue', | ||||||
|         productPrice: 100, |         productPrice: '100.00', | ||||||
|         productDescription: 'Test desc blue', |         productDescription: 'Test desc blue', | ||||||
|         productPublished: true, |         productPublished: true, | ||||||
|         productTags: 'organic, jacket, blue', |         productTags: 'organic, jacket, blue', | ||||||
|  | @ -265,7 +265,7 @@ test('[Success] Update a product', async t => { | ||||||
|     const product = { |     const product = { | ||||||
|         productId: g.products[0]._id, |         productId: g.products[0]._id, | ||||||
|         productTitle: 'Test Jacket', |         productTitle: 'Test Jacket', | ||||||
|         productPrice: 200, |         productPrice: '200.00', | ||||||
|         productDescription: 'Test desc', |         productDescription: 'Test desc', | ||||||
|         productPublished: true, |         productPublished: true, | ||||||
|         productTags: 'organic, jacket', |         productTags: 'organic, jacket', | ||||||
|  |  | ||||||
|  | @ -165,6 +165,7 @@ | ||||||
| 		<input type="hidden" id="input_notify_messageType" value="{{messageType}}"> | 		<input type="hidden" id="input_notify_messageType" value="{{messageType}}"> | ||||||
|         <input type="hidden" id="cartCheckout" value="{{checkout}}"> |         <input type="hidden" id="cartCheckout" value="{{checkout}}"> | ||||||
|         <input type="hidden" id="cartTheme" value="{{@root.config.theme}}"> |         <input type="hidden" id="cartTheme" value="{{@root.config.theme}}"> | ||||||
|  |         <input type="hidden" id="currencySymbol" value="{{@root.config.currencySymbol}}"> | ||||||
| 		<div id="notify_message"></div> | 		<div id="notify_message"></div> | ||||||
| 		{{#if showFooter}} | 		{{#if showFooter}} | ||||||
|             <footer class="footer"> |             <footer class="footer"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue