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