Skip to content

feat: openapi vue query - #110

Merged
yupix merged 7 commits into
mainfrom
feat/koyori-vue-query
Jun 14, 2026
Merged

feat: openapi vue query#110
yupix merged 7 commits into
mainfrom
feat/koyori-vue-query

Conversation

@sousuke0422

@sousuke0422 sousuke0422 commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

これを元にラッパー構築。
#8 のPhase 0.5

related to #104
resolve #112

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • 型安全な Vue Query ベースの API クライアントを追加
    • ラベル画面の取得を、テナント・プロジェクトごとのルート情報に基づく方式へ変更(エラー/未取得時の挙動と表示を改善)
  • Tests

    • API クライアントの成功・認可・エラー時の挙動を含むテストを追加
  • Chores

    • 依存関係を追加・バージョン更新
    • 最小リリース経過期間の除外設定を更新
    • .worktrees/ を Git 管理対象から除外

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

OpenAPI 型に基づく型付き TanStack Vue Query クライアントを追加し、対応するテストを導入、ラベル一覧ページをルートパラメータ(tenant/projectKey)駆動でテナント別エンドポイントへ切替えて表示を調整します。

Changes

Vue Query API クライアント統合

Layer / File(s) Summary
依存関係と設定
.gitignore, apps/frontend/package.json, apps/frontend/pnpm-workspace.yaml
.worktrees/.gitignore に追加し、@koyori-app/openapi-vue-query@0.1.3apps/frontend の依存に追加、pnpm ワークスペースで minimumReleaseAgeExclude に同パッケージを登録。
Vue Query 型付きクライアント実装
apps/frontend/src/lib/api-vue-query.ts
openapi-fetch@koyori-app/openapi-vue-query を用いて fetchClient/apiClient を初期化し、meQueryOptions()projectLabelsQueryOptions(tenantId, projectId)useMeQuery()useLogoutMutation()、およびテスト用 createTestApiClient(fetchImpl) を公開。
API クライアント テストスイート
apps/frontend/src/lib/__tests__/api-vue-query.test.ts
fetch モック(GET /v1/auth/me → mockUser/200、POST /v1/auth/logout → 204、その他 404)と Vue Query の QueryClient を使った統合テストを追加し、クエリキー形状、成功応答、401/403 のエラー挙動を検証。
ラベルページへの統合
apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue
usePageContext().routeParams から tenantprojectKey を取得して型チェックを行い、有効な場合に GET /v1/tenants/{tenant_id}/projects/{project_id}/labels を呼び出すよう取得ロジックを切替え。パラメータ不足時はエラーを設定し、UI(スピナー・ラベル色表示)のレンダリングを調整。

Sequence Diagram(s)

sequenceDiagram
  participant Client as ラベルページ
  participant Router as usePageContext
  participant ApiClient as apiClient
  participant Server as Backend API

  Client->>Router: routeParams 取得
  Router-->>Client: tenant, projectKey
  Client->>Client: パラメータ型チェック
  alt 有効
    Client->>ApiClient: projectLabelsQueryOptions(tenant, projectKey)
    ApiClient->>Server: GET /v1/tenants/{tenant_id}/projects/{project_id}/labels
    Server-->>ApiClient: labels 配列
    ApiClient-->>Client: labels 状態更新
    Client->>Client: ラベルリスト表示
  else 無効
    Client->>Client: エラーメッセージ設定
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • koyori-app/task#104: TanStack Vue Query の基盤設定と依存追加で、本PR のクライアント実装と同一の Vue Query 導入機能ラインで関連。
  • koyori-app/task#19: /v1/tenants 配下のプロジェクト CRUD を追加する変更で、本PR のラベル取得エンドポイント構造と関連。

Suggested reviewers

  • yupix

Poem

🐰 ぴょんと跳ねて知らせるよ、
型付きクエリがやってきたよ、
テナント追ってラベル集め、
スピンと色で画面きらり、
うさぎもにっこりバンザイ!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed プルリクエストのタイトル「feat: openapi vue query」は、変更内容の主な目的であるOpenAPI Vue Queryラッパーの導入を簡潔に表現しており、チェンジセットの主要な変更を明確に要約しています。
Linked Issues check ✅ Passed プルリクエストは#112(TanStack Query整備)に関連し、OpenAPI Vue Queryクライアント、テスト、ページコンポーネント更新など、TanStack Query統合の確立に必要な実装をすべて含んでいます。
Out of Scope Changes check ✅ Passed すべての変更は#112のTanStack Query整備目標に直接関連しており、OpenAPI Vue Query統合のための必要な実装に限定されています。.gitignoreへの.worktrees/追加は開発環境の整備として適切です。

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/koyori-vue-query

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/frontend/package.json`:
- Line 20: The dependency on the local tarball for `@koyori-app/openapi-vue-query`
(currently "file:/tmp/koyori-0.1.3.tgz") makes installs unreproducible; change
the dependency in apps/frontend package.json to a published semver (e.g.
"0.1.3") or to a workspace reference (e.g. "workspace:^0.1.3" or the local
workspace spec) so it no longer points to /tmp, then run your package manager
(pnpm install) to regenerate pnpm-lock.yaml and verify the lockfile no longer
references /tmp/koyori-0.1.3.tgz; also ensure the package is listed in the repo
workspaces if you choose the workspace option.

In `@apps/frontend/src/pages/`@tenant/projects/@projectKey/labels/+Page.vue:
- Around line 19-29: The code currently reads projectKey from
pageContext.routeParams and passes it directly as the OpenAPI path param
project_id to api.GET, but projectKey and project_id are distinct concepts so
this causes wrong/empty responses; fix by either (A) making the route supply the
actual project_id (rename/align the route param so
pageContext.routeParams.project_id is present and used) or (B) resolve
projectKey → project_id before calling api.GET (e.g., call the project lookup
endpoint using projectKey, extract the real id, then pass that id into api.GET);
update the code paths that reference projectKey, pageContext.routeParams, and
the api.GET call to use the resolved project_id.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7bfce99b-d7b1-4aca-a87c-556b41050997

📥 Commits

Reviewing files that changed from the base of the PR and between dd34682 and 0cf0135.

⛔ Files ignored due to path filters (1)
  • apps/frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • .gitignore
  • apps/frontend/package.json
  • apps/frontend/pnpm-workspace.yaml
  • apps/frontend/src/lib/__tests__/api-vue-query.test.ts
  • apps/frontend/src/lib/api-vue-query.ts
  • apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue

Comment thread apps/frontend/package.json Outdated
sousuke0422 added a commit that referenced this pull request Jun 12, 2026
…arams

Rename local binding projectKey → projectId to match the project_id param
the API expects. Adds a comment noting the key=id assumption; if slug vs UUID
semantics diverge later, resolve before the API call at that point.

Addresses CodeRabbit finding on PR #110.

Assisted-by: multi-agent-shogun-aki-tweak
@sousuke0422 sousuke0422 self-assigned this Jun 12, 2026
@sousuke0422
sousuke0422 requested a review from yupix June 12, 2026 09:49

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue (1)

28-36: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Vue Query 統合の利用を検討してください。

このコンポーネントは useDefaultApi() (生の openapi-fetch クライアント) を使用していますが、本 PR で追加された api-vue-query.ts には projectLabelsQueryOptions ヘルパーが用意されています。Vue Query を使うことでキャッシュ、自動再フェッチ、devtools 連携などの恩恵を受けられます。

import { useQuery } from '`@tanstack/vue-query`';
import { projectLabelsQueryOptions } from '`@/lib/api-vue-query`';

// onMounted の代わりに useQuery を使用
const { data: labels, isLoading: loading, error } = useQuery(
  projectLabelsQueryOptions(tenant, projectId)
);

段階的な移行を意図している場合は、現状のままでも問題ありません。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/src/pages/`@tenant/projects/@projectKey/labels/+Page.vue around
lines 28 - 36, The component is using the raw openapi-fetch client via
useDefaultApi() and manual await/if logic; switch to the provided Vue Query
helper by importing projectLabelsQueryOptions from api-vue-query.ts and using
useQuery(projectLabelsQueryOptions(tenant, projectId)) instead of the manual GET
call in onMounted; replace labels, error and loading state with the values
returned from useQuery (data as labels, isLoading as loading, error) and remove
the manual fetch/error assignment and the useDefaultApi() GET invocation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@apps/frontend/src/pages/`@tenant/projects/@projectKey/labels/+Page.vue:
- Around line 28-36: The component is using the raw openapi-fetch client via
useDefaultApi() and manual await/if logic; switch to the provided Vue Query
helper by importing projectLabelsQueryOptions from api-vue-query.ts and using
useQuery(projectLabelsQueryOptions(tenant, projectId)) instead of the manual GET
call in onMounted; replace labels, error and loading state with the values
returned from useQuery (data as labels, isLoading as loading, error) and remove
the manual fetch/error assignment and the useDefaultApi() GET invocation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e45da775-29cf-4dde-83b5-a34e9f49fbd7

📥 Commits

Reviewing files that changed from the base of the PR and between 1421a7c and 990581e.

📒 Files selected for processing (1)
  • apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/frontend/src/pages/`@tenant/projects/@projectKey/labels/+Page.vue:
- Around line 31-34: The error text is incorrect for the projects list fetch:
update the string assigned to error.value in the projectsError handler (the
block that checks projectsError) from 'Failed to fetch project' to 'Failed to
fetch projects' so the message accurately reflects that multiple projects were
being fetched.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bcb21098-16e1-48ba-a06e-1c16cb90e481

📥 Commits

Reviewing files that changed from the base of the PR and between 990581e and 7964113.

📒 Files selected for processing (1)
  • apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue

@sousuke0422 sousuke0422 mentioned this pull request Jun 13, 2026
@sousuke0422 sousuke0422 linked an issue Jun 13, 2026 that may be closed by this pull request
Add typed api-vue-query client, unit tests with mocked fetch, and fix labels
page OpenAPI path so vue-tsc passes on the task schema.

Assisted-by: multi-agent-shogun-aki-tweak
…ue-query 0.1.3

- Remove PathsWithMethod workaround types (fixed upstream in 0.1.2)
- Remove manual type casts; useQuery/useMutation now fully infer return types
- Rename createTestApiVueQueryClient → createTestApiClient; expose raw client
- Update tests: withQuery<T> helper for zero-annotation inference, add error
  and queryOptions integration cases (6 tests total)
- Bump to 0.1.3: exports UseQueryResult/UseMutationResult<CreatedClient, ...>

Assisted-by: multi-agent-shogun-aki-tweak
Remove queryOptions+useQuery integration test — QueryOptionsFunction return
type carries [key: string]: any which is incompatible with @tanstack/vue-query
useQuery overloads under vue-tsc strict checking. Behavior is already covered
by the withQuery helper tests.

Assisted-by: multi-agent-shogun-aki-tweak
…and 0.1.2

Assisted-by: multi-agent-shogun-aki-tweak
…arams

Rename local binding projectKey → projectId to match the project_id param
the API expects. Adds a comment noting the key=id assumption; if slug vs UUID
semantics diverge later, resolve before the API call at that point.

Addresses CodeRabbit finding on PR #110.

Assisted-by: multi-agent-shogun-aki-tweak
@sousuke0422
sousuke0422 force-pushed the feat/koyori-vue-query branch from 8f39fae to 2fe7c57 Compare June 14, 2026 08:09

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/frontend/src/lib/__tests__/api-vue-query.test.ts`:
- Around line 60-62: The test suite is not unmounting components after each
test, causing test contamination. Currently the afterEach hook only calls
queryClient.clear() but does not clean up mounted Vue components. Store a
reference to the wrapper returned by the mount() call in the test cases (around
lines 64-80), and update the afterEach hook to call wrapper.unmount() after
clearing the queryClient to ensure all mounted components, their watchers, and
subscriptions are properly cleaned up between tests.
- Around line 86-89: Single `flushPromises()` calls can miss Vue Query state
transitions and cause test instability. Replace the `flushPromises()` call at
line 86-89 (before checking `query.isSuccess.value`) with `vi.waitFor(() =>
expect(query.isSuccess.value).toBe(true))` to ensure the state fully transitions
before assertions. Apply the same fix at the sibling location (lines 125-127) by
replacing the single `flushPromises()` call with `vi.waitFor` to conditionally
wait for the relevant state condition (either `isSuccess` or `isError`) before
verifying the query state and data.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3c9a6429-9811-4c6a-b469-03153f349c30

📥 Commits

Reviewing files that changed from the base of the PR and between 7964113 and 2fe7c57.

⛔ Files ignored due to path filters (1)
  • apps/frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • .gitignore
  • apps/frontend/package.json
  • apps/frontend/pnpm-workspace.yaml
  • apps/frontend/src/lib/__tests__/api-vue-query.test.ts
  • apps/frontend/src/lib/api-vue-query.ts
  • apps/frontend/src/pages/@tenant/projects/@projectKey/labels/+Page.vue

Comment on lines +60 to +62
afterEach(() => {
queryClient.clear();
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat -n apps/frontend/src/lib/__tests__/api-vue-query.test.ts | head -100

Repository: koyori-app/task

Length of output: 3450


マウントしたコンポーネントを未解放のままにしており、テスト間汚染を招きます。

Line 64-80 で mount() した wrapper を参照保持していない上、Line 60-62 の afterEach では queryClient.clear() のみです。複数のテストが実行される際、各 withQuery() の呼び出しで新たなコンポーネントが mount されますが、一度も unmount されません。これにより watchers や subscriptions がテスト間で残り、テストの flakiness や汚染を招きます。各テスト後に確実に unmount してください。

🔧 修正例
-import { mount, flushPromises } from '`@vue/test-utils`';
+import { mount, flushPromises, type VueWrapper } from '`@vue/test-utils`';
@@
 describe('api-vue-query PoC', () => {
+  const wrappers: VueWrapper[] = [];
@@
   afterEach(() => {
+    for (const wrapper of wrappers) wrapper.unmount();
+    wrappers.length = 0;
     queryClient.clear();
   });
@@
   function withQuery<T>(setup: () => T): T {
     let result!: T;
-    mount(
+    const wrapper = mount(
       defineComponent({
@@
       },
     );
+    wrappers.push(wrapper);
     return result;
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/src/lib/__tests__/api-vue-query.test.ts` around lines 60 - 62,
The test suite is not unmounting components after each test, causing test
contamination. Currently the afterEach hook only calls queryClient.clear() but
does not clean up mounted Vue components. Store a reference to the wrapper
returned by the mount() call in the test cases (around lines 64-80), and update
the afterEach hook to call wrapper.unmount() after clearing the queryClient to
ensure all mounted components, their watchers, and subscriptions are properly
cleaned up between tests.

Comment on lines +86 to +89
await flushPromises();

expect(query.isSuccess.value).toBe(true);
expect(query.data.value).toEqual(mockUser);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat -n apps/frontend/src/lib/__tests__/api-vue-query.test.ts | head -150

Repository: koyori-app/task

Length of output: 5098


🏁 Script executed:

find . -name "vitest.config.*" -o -name "package.json" | head -5

Repository: koyori-app/task

Length of output: 112


🏁 Script executed:

cat apps/frontend/package.json

Repository: koyori-app/task

Length of output: 2479


🏁 Script executed:

find . -name "vitest.config.*" -o -name "vite.config.*" | grep -E "(vitest|vite)\.config"

Repository: koyori-app/task

Length of output: 116


🏁 Script executed:

cat apps/frontend/vite.config.ts

Repository: koyori-app/task

Length of output: 3992


🏁 Script executed:

cat -n apps/frontend/pnpm-lock.yaml 2>/dev/null | grep -A 5 '"vitest"' | head -20

Repository: koyori-app/task

Length of output: 41


🌐 Web query:

Vue Query vitest testing flushPromises vs vi.waitFor best practices

💡 Result:

When testing Vue Query with Vitest, the choice between flushPromises, vi.waitFor, and vi.advanceTimersByTimeAsync depends on what you are trying to achieve [1][2]. Best practices for TanStack Query testing in Vitest are summarized below: 1. Use vi.advanceTimersByTimeAsync for Time-Based Operations If your tests utilize Vitest fake timers (vi.useFakeTimers), explicitly advancing timers is the most reliable and performant way to test queries [1]. Instead of using polling-based waits, you can advance time directly to resolve internal query timeouts or delays, which reduces test execution time and avoids flakiness [1]. 2. Use vi.waitFor for Polling Assertions vi.waitFor is best suited for scenarios where you need to poll for a specific condition to become true, such as waiting for a reactive state (e.g., isSuccess) to change [3][4]. It is highly effective when the exact timing of the state change is not immediately controllable or when testing asynchronous side effects that settle over an indeterminate duration [5][3]. 3. Use flushPromises for Resolving Pending Promises flushPromises (from @vue/test-utils) is useful for ensuring all currently pending microtasks (promises) are resolved [6]. It is frequently used to clear API call queues when you are mocking requests and want to immediately progress the test to the data-loaded state [2][6]. Note that in some complex setups (e.g., using MSW), you may need to call flushPromises multiple times to resolve chained promises [2][7]. Summary of Selection Criteria: - Use vi.advanceTimersByTimeAsync when fake timers are enabled to precisely trigger query updates [1][8]. - Use vi.waitFor when you need to assert against a state that will eventually become true [3][4]. - Use flushPromises to force the resolution of all pending promises when simple synchronization is needed [2][6]. TanStack Query official testing documentation often utilizes vi.waitFor for hooks testing to ensure the query has reached the expected status [3][4], while internal library tests increasingly favor vi.advanceTimersByTimeAsync for performance and reliability when fake timers are active [1].

Citations:


🌐 Web query:

vitest vi.waitFor API documentation when was it introduced

💡 Result:

The vi.waitFor API in Vitest was introduced in version 0.34.5 [1][2][3]. It was added as a new feature to support waiting for asynchronous actions or conditions to be met during tests [4][5]. The documentation for vi.waitFor explicitly notes this version as the origin [1][2][6].

Citations:


flushPromises() 1回の待機では Vue Query の状態遷移を取りこぼす可能性があります。

Line 86 と Line 125 の単発 flushPromises() 依存はテストの不安定性につながりやすいです。isSuccess / isError などの状態確認には、条件待機 (vi.waitFor) を使用してください。TanStack Query の公式テスティングドキュメントでも、フック検証時には vi.waitFor が推奨されています。

🔧 修正例
-    await flushPromises();
-
-    expect(query.isSuccess.value).toBe(true);
+    await vi.waitFor(() => {
+      expect(query.isSuccess.value).toBe(true);
+    });
     expect(query.data.value).toEqual(mockUser);
@@
-    await flushPromises();
-
-    expect(query.isError.value).toBe(true);
+    await vi.waitFor(() => {
+      expect(query.isError.value).toBe(true);
+    });

Also applies to: 125-127

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/src/lib/__tests__/api-vue-query.test.ts` around lines 86 - 89,
Single `flushPromises()` calls can miss Vue Query state transitions and cause
test instability. Replace the `flushPromises()` call at line 86-89 (before
checking `query.isSuccess.value`) with `vi.waitFor(() =>
expect(query.isSuccess.value).toBe(true))` to ensure the state fully transitions
before assertions. Apply the same fix at the sibling location (lines 125-127) by
replacing the single `flushPromises()` call with `vi.waitFor` to conditionally
wait for the relevant state condition (either `isSuccess` or `isError`) before
verifying the query state and data.

@sousuke0422 sousuke0422 mentioned this pull request Jun 14, 2026
@yupix
yupix merged commit 0dda302 into main Jun 14, 2026
3 checks passed
@yupix
yupix deleted the feat/koyori-vue-query branch June 18, 2026 01:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tanstack query整備

2 participants