Mandarin Duck
Mandarin Duck
NNuxt
Created by Mandarin Duck on 4/16/2025 in #❓・help
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