From fda600a636a5ff666a9591ca54744ccc70d4a80b Mon Sep 17 00:00:00 2001 From: Kirill Romanov Date: Sat, 3 Dec 2022 18:31:18 +0300 Subject: [PATCH] feat: add a way to wait for query update fixes: #48 --- packages/core/src/index.ts | 1 + packages/core/src/queue-query-update.ts | 6 ++++++ packages/tests-base/index.ts | 11 ++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 3fd28a7..ae938c3 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,2 +1,3 @@ export * from './transformers'; export { useRouteQuery } from './useRouteQuery'; +export { waitForQueryUpdate } from './queue-query-update'; diff --git a/packages/core/src/queue-query-update.ts b/packages/core/src/queue-query-update.ts index aeaaf65..b6b7f81 100644 --- a/packages/core/src/queue-query-update.ts +++ b/packages/core/src/queue-query-update.ts @@ -28,6 +28,12 @@ export function queueQueryUpdate( void queryReplaceQueue.run(currentQuery); } +export async function waitForQueryUpdate() { + if (queryReplaceQueue) { + await queryReplaceQueue.waitForFinish(); + } +} + async function updateQuery(router: Router, previousQuery: RouteQuery, query: RouteQuery) { try { await router.replace({ diff --git a/packages/tests-base/index.ts b/packages/tests-base/index.ts index 65461c0..d8f8469 100644 --- a/packages/tests-base/index.ts +++ b/packages/tests-base/index.ts @@ -1,6 +1,6 @@ import { setImmediate } from 'timers'; import { expect, TestAPI } from 'vitest'; -import { RouteQueryTransformer, useRouteQuery } from 'vue-use-route-query/src'; +import { RouteQueryTransformer, useRouteQuery, waitForQueryUpdate } from 'vue-use-route-query/src'; import { RouteQuery } from 'vue-use-route-query/src/types'; interface MountResult { @@ -186,6 +186,15 @@ export function testUseRouteQuery( expect(getCurrentQuery().array).toBe('foo,bar'); }); + + it('should allow to wait for query update', async () => { + const { result } = mountComposition(() => useRouteQuery('foo', null)); + + result.value = 'bar'; + await waitForQueryUpdate(); + + expect(getCurrentQuery().foo).toBe('bar'); + }); } function flushPromises(): Promise {