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());