diff --git a/packages/test-e2e-composable-vue3/src/components/OnResult.vue b/packages/test-e2e-composable-vue3/src/components/OnResult.vue new file mode 100644 index 0000000..b70d577 --- /dev/null +++ b/packages/test-e2e-composable-vue3/src/components/OnResult.vue @@ -0,0 +1,24 @@ + + + diff --git a/packages/test-e2e-composable-vue3/src/components/OnResultChild.vue b/packages/test-e2e-composable-vue3/src/components/OnResultChild.vue new file mode 100644 index 0000000..5848465 --- /dev/null +++ b/packages/test-e2e-composable-vue3/src/components/OnResultChild.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/test-e2e-composable-vue3/src/router.ts b/packages/test-e2e-composable-vue3/src/router.ts index cd90f7b..7879c38 100644 --- a/packages/test-e2e-composable-vue3/src/router.ts +++ b/packages/test-e2e-composable-vue3/src/router.ts @@ -38,5 +38,9 @@ export const router = createRouter({ path: '/disabled', component: () => import('./components/Disabled.vue'), }, + { + path: '/on-result', + component: () => import('./components/OnResult.vue'), + }, ], }) diff --git a/packages/test-e2e-composable-vue3/tests/e2e/specs/test.cy.js b/packages/test-e2e-composable-vue3/tests/e2e/specs/test.cy.js index 4616f0c..79e7441 100644 --- a/packages/test-e2e-composable-vue3/tests/e2e/specs/test.cy.js +++ b/packages/test-e2e-composable-vue3/tests/e2e/specs/test.cy.js @@ -117,4 +117,15 @@ describe('Vue 3 + Apollo Composable', () => { cy.get('button').click() cy.get('[data-test-id="data"]').should('contain', 'Loaded channel: General') }) + + it('onResult with immediate result', () => { + cy.visit('/on-result') + cy.get('[data-test-id="data"]').should('not.exist') + cy.get('input[type="checkbox"]').click() + cy.get('[data-test-id="data"]').should('contain', 'Loaded channel: General') + cy.get('input[type="checkbox"]').click() + cy.get('[data-test-id="data"]').should('not.exist') + cy.get('input[type="checkbox"]').click() + cy.get('[data-test-id="data"]').should('contain', 'Loaded channel: General') + }) }) diff --git a/packages/vue-apollo-composable/src/useQuery.ts b/packages/vue-apollo-composable/src/useQuery.ts index 551a14f..5e76185 100644 --- a/packages/vue-apollo-composable/src/useQuery.ts +++ b/packages/vue-apollo-composable/src/useQuery.ts @@ -292,7 +292,10 @@ export function useQueryImpl< result.value = queryResult.data && Object.keys(queryResult.data).length === 0 ? undefined : queryResult.data loading.value = queryResult.loading networkStatus.value = queryResult.networkStatus - resultEvent.trigger(queryResult) + // Wait for handlers to be registered + nextTick(() => { + resultEvent.trigger(queryResult) + }) } function onError (queryError: unknown) { @@ -322,7 +325,10 @@ export function useQueryImpl< error.value = apolloError loading.value = false networkStatus.value = 8 - errorEvent.trigger(apolloError) + // Wait for handlers to be registered + nextTick(() => { + errorEvent.trigger(apolloError) + }) } function resubscribeToQuery () {