Mandarin Duck
Problem in doing paginations between 2 composables
useProducts.ts
import { GET_PRODUCTS } from '../gql/queries/GetProducts'
import { GET_PRODUCTS_BY_COLLECTION_IDS } from '../gql/queries/GetProductsByCollectionIds'
export const useProducts = (pagination) => {
const products = ref([])
const categoryId = ref<string>('')
const collectionId = ref<string>('')
const variables = computed(() => {
const result = pagination.isForward.value
? {
first: pagination.perPage.value,
after: pagination.cursor.value
}
: {
last: pagination.perPage.value,
before: pagination.cursor.value
}
console.log('Variables computed:', {
isForward: pagination.isForward.value,
cursor: pagination.cursor.value,
result
})
return result
})
const {
result: dataProducts,
error,
refetch
} = useQuery(GET_PRODUCTS, () => variables.value, {
fetchPolicy: 'network-only',
enabled: computed(
() => !!pagination.cursor.value || pagination.isForward.value
)
})
watchEffect(() => {
// console.log('Current variables:', variables.value)
// console.log('Query result variables:', dataProducts.value)
if (dataProducts?.value?.products?.edges) {
const edges = dataProducts.value.products.edges
products.value = edges
const pageInfo = dataProducts.value.products.pageInfo
// console.log(':duck: ~ watchEffect ~ pageInfo:', pageInfo)
const totalCount = dataProducts.value.products?.totalCount
pagination.cursorNextPage.value = pageInfo.endCursor
pagination.cursorPrevPage.value = pageInfo.startCursor
pagination.hasNextPage.value = pageInfo.hasNextPage
pagination.hasPreviousPage.value = pageInfo.hasPreviousPage
pagination.totalCount.value = totalCount
}
})
return {
data: products,
categoryId,
collectionId,
refetch,
resetFilters,
dataByCollectionIds: dataProductsByCollectionIds
}
}
import { GET_PRODUCTS } from '../gql/queries/GetProducts'
import { GET_PRODUCTS_BY_COLLECTION_IDS } from '../gql/queries/GetProductsByCollectionIds'
export const useProducts = (pagination) => {
const products = ref([])
const categoryId = ref<string>('')
const collectionId = ref<string>('')
const variables = computed(() => {
const result = pagination.isForward.value
? {
first: pagination.perPage.value,
after: pagination.cursor.value
}
: {
last: pagination.perPage.value,
before: pagination.cursor.value
}
console.log('Variables computed:', {
isForward: pagination.isForward.value,
cursor: pagination.cursor.value,
result
})
return result
})
const {
result: dataProducts,
error,
refetch
} = useQuery(GET_PRODUCTS, () => variables.value, {
fetchPolicy: 'network-only',
enabled: computed(
() => !!pagination.cursor.value || pagination.isForward.value
)
})
watchEffect(() => {
// console.log('Current variables:', variables.value)
// console.log('Query result variables:', dataProducts.value)
if (dataProducts?.value?.products?.edges) {
const edges = dataProducts.value.products.edges
products.value = edges
const pageInfo = dataProducts.value.products.pageInfo
// console.log(':duck: ~ watchEffect ~ pageInfo:', pageInfo)
const totalCount = dataProducts.value.products?.totalCount
pagination.cursorNextPage.value = pageInfo.endCursor
pagination.cursorPrevPage.value = pageInfo.startCursor
pagination.hasNextPage.value = pageInfo.hasNextPage
pagination.hasPreviousPage.value = pageInfo.hasPreviousPage
pagination.totalCount.value = totalCount
}
})
return {
data: products,
categoryId,
collectionId,
refetch,
resetFilters,
dataByCollectionIds: dataProductsByCollectionIds
}
}
6 replies