diff --git a/src/components/ui/NewVnSearchBar.vue b/src/components/ui/NewVnSearchBar.vue
index d5b57433..7806b297 100644
--- a/src/components/ui/NewVnSearchBar.vue
+++ b/src/components/ui/NewVnSearchBar.vue
@@ -53,6 +53,12 @@ const search = async () => {
return;
}
+ if (props.searchFn) {
+ const data = await props.searchFn(searchTerm.value);
+ emit('onSearch', data);
+ return;
+ }
+
if (props.url) {
const params = {
filter: props.filter,
diff --git a/src/pages/Ecomerce/CatalogCard.vue b/src/pages/Ecomerce/CatalogCard.vue
index 0e795c2f..9c93495b 100644
--- a/src/pages/Ecomerce/CatalogCard.vue
+++ b/src/pages/Ecomerce/CatalogCard.vue
@@ -37,7 +37,7 @@ const { t } = useI18n();
>
- {{ item.name }}
+ {{ item.item }}
diff --git a/src/pages/Ecomerce/CatalogView.vue b/src/pages/Ecomerce/CatalogView.vue
index 1e19da27..714bc47c 100644
--- a/src/pages/Ecomerce/CatalogView.vue
+++ b/src/pages/Ecomerce/CatalogView.vue
@@ -13,7 +13,7 @@ import { useRoute, useRouter } from 'vue-router';
import VnImg from 'src/components/ui/VnImg.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import CatalogCard from 'src/pages/Ecomerce/CatalogCard.vue';
-import VnSearchBar from 'src/components/ui/VnSearchBar.vue';
+import VnSearchBar from 'src/components/ui/NewVnSearchBar.vue';
import { useAppStore } from 'stores/app';
import { useUserStore } from 'stores/user';
@@ -21,7 +21,6 @@ import { storeToRefs } from 'pinia';
import { formatDateTitle, currency } from 'src/lib/filters.js';
import useNotify from 'src/composables/useNotify.js';
import debounce from 'src/utils/debouncer.js';
-import { fetch } from 'src/composables/serviceUtils';
const jApi = inject('jApi');
const api = inject('api');
@@ -58,99 +57,49 @@ const producer = ref(null);
const origin = ref(null);
const subcategory = ref(null);
// Order by options
-const orderBy = ref({
- field: 'relevancy DESC, name',
- way: 'ASC',
- isTag: false
-});
+
+const orderBy = ref('i.relevancy DESC, longName');
const orderByOptions = ref([
{
label: t('relevancy'),
- value: {
- field: 'relevancy DESC, name',
- way: 'ASC',
- isTag: false
- }
+ value: 'i.relevancy DESC, longName'
},
{
label: t('name'),
- value: {
- field: 'name',
- way: 'ASC',
- isTag: false
- }
+ value: 'longName ASC'
},
{
label: t('lowerSize'),
- value: {
- field: 'i.size',
- way: 'ASC',
- isTag: false
- }
+ value: 'size ASC'
},
{
label: t('higherSize'),
- value: {
- field: 'i.size',
- way: 'DESC',
- isTag: false
- }
+ value: 'size DESC'
},
{
label: t('lowerPrice'),
- value: {
- field: 'price',
- way: 'ASC',
- isTag: false
- }
+ value: 'price ASC'
},
{
label: t('higherPrice'),
- value: {
- field: 'price',
- way: 'DESC',
- isTag: false
- }
+ value: 'price DESC'
},
{
label: t('available'),
- value: {
- field: 'available',
- way: 'ASC',
- isTag: false
- }
- },
- {
- label: t('color'),
- value: {
- field: 'i.inkFk',
- way: 'ASC',
- isTag: false
- }
+ value: 'available'
},
+ { label: t('color'), value: 'ink ASC' },
{
label: t('producer'),
- value: {
- field: 'producerFk',
- way: 'ASC',
- isTag: false
- }
+ value: 'producer ASC'
},
{
label: t('origin'),
- value: {
- field: 'originFk',
- way: 'ASC',
- isTag: false
- }
+ value: 'origin ASC'
},
{
label: t('category'),
- value: {
- field: 'categoryFk',
- way: 'ASC',
- isTag: false
- }
+ value: 'category ASC'
}
]);
@@ -241,11 +190,7 @@ const selectedOrderBy = computed({
if (value) {
orderBy.value = value;
} else {
- orderBy.value = {
- field: 'relevancy DESC, name',
- way: 'ASC',
- isTag: false
- };
+ orderBy.value = 'i.relevancy DESC, longName';
}
debouncedGetItems();
}
@@ -323,44 +268,42 @@ const getFilters = async () => {
await Promise.allSettled(promises);
};
-const getItemExprBuilder = (param, value) => {
- if (param === 'orderFk' || param === 'orderBy') return;
- else return { [param]: value };
-};
-
-const getItems = async () => {
+const getItems = async searchValue => {
try {
- if (!basketOrderId.value || !isSomeFilterSelected.value) return;
+ if (
+ !basketOrderId.value ||
+ !isSomeFilterSelected.value ||
+ loading.value
+ )
+ return;
+
loading.value = true;
const params = {
orderFk: basketOrderId.value,
- orderBy: JSON.stringify({
- field: selectedOrderBy.value.field,
- way: selectedOrderBy.value.way,
- isTag: selectedOrderBy.value.isTag
- }),
- typeFk: selectedType.value,
+ orderBy: selectedOrderBy.value,
+ search: searchValue,
categoryFk: selectedCategory.value,
+ typeFk: selectedType.value,
inkFk: selectedColor.value,
producerFk: selectedProducer.value,
originFk: selectedOrigin.value
};
- const { data } = await fetch({
- url: 'Orders/catalogFilter',
- params,
- exprBuilder: getItemExprBuilder
+
+ const { data } = await api.get('Items/catalog', {
+ params
});
items.value = data;
await onItemsFetched();
loading.value = false;
+ return data;
} catch (error) {
console.error('Error getting items:', error);
}
};
-const debouncedGetItems = debounce(getItems, 400);
+const debouncedGetItems = searchValue => debounce(getItems(searchValue), 400);
const debouncedGetFilters = debounce(getFilters, 400);
const getOrder = async () => {
@@ -749,6 +692,7 @@ onBeforeUnmount(() => appStore.resetCustomTitle());
{
items = [];