Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/strong-pans-itch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@hey-api/openapi-ts': patch
---

fix: export query key functions from TanStack Query plugin
28 changes: 25 additions & 3 deletions docs/openapi-ts/tanstack-query.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ You can now run `openapi-ts` to generate TanStack Query artifacts. 🎉

The TanStack Query plugin will optionally generate the following output layers, depending on the input specification.

### Queries
## Queries

Queries are generated from GET and POST endpoints. The generated functions follow the naming convention of services and append `Options`, e.g. `getPetByIdOptions()`.

Expand All @@ -83,7 +83,7 @@ const { data, error } = useQuery({
});
```

### Infinite Queries
## Infinite Queries

Infinite queries are generated from GET and POST endpoints if we detect a pagination parameter. The generated functions follow the naming convention of services and append `InfiniteOptions`, e.g. `getFooInfiniteOptions()`.

Expand All @@ -99,7 +99,7 @@ const { data, error } = useInfiniteQuery({
});
```

### Mutations
## Mutations

Mutations are generated from DELETE, PATCH, POST, and PUT endpoints. The generated functions follow the naming convention of services and append `Mutation`, e.g. `addPetMutation()`.

Expand All @@ -118,5 +118,27 @@ addPet.mutate({
});
```

## Query Keys

Query keys are generated for both queries and infinite queries. If you have access to the result of query or infinite query options function, you can get the query key from the `queryKey` field.

```ts
const { queryKey } = getPetByIdOptions({
path: {
petId: 1,
},
});
```

Alternatively, you can access the same query key by calling `QueryKey` or `InfiniteQueryKey` function.

```ts
const queryKey = getPetByIdQueryKey({
path: {
petId: 1,
},
});
```

<!--@include: ../examples.md-->
<!--@include: ../sponsorship.md-->
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ const createQueryKey = <TOptions extends Options>(
return params;
};

export const addPetQueryKey = (options: Options<AddPetData>) => [
createQueryKey('addPet', options),
];

export const addPetOptions = (options: Options<AddPetData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -107,7 +111,7 @@ export const addPetOptions = (options: Options<AddPetData>) =>
});
return data;
},
queryKey: [createQueryKey('addPet', options)],
queryKey: addPetQueryKey(options),
});

export const addPetMutation = () => {
Expand Down Expand Up @@ -144,6 +148,10 @@ export const updatePetMutation = () => {
return mutationOptions;
};

export const findPetsByStatusQueryKey = (
options?: Options<FindPetsByStatusData>,
) => [createQueryKey('findPetsByStatus', options)];

export const findPetsByStatusOptions = (
options?: Options<FindPetsByStatusData>,
) =>
Expand All @@ -156,9 +164,13 @@ export const findPetsByStatusOptions = (
});
return data;
},
queryKey: [createQueryKey('findPetsByStatus', options)],
queryKey: findPetsByStatusQueryKey(options),
});

export const findPetsByTagsQueryKey = (
options?: Options<FindPetsByTagsData>,
) => [createQueryKey('findPetsByTags', options)];

export const findPetsByTagsOptions = (options?: Options<FindPetsByTagsData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -169,9 +181,13 @@ export const findPetsByTagsOptions = (options?: Options<FindPetsByTagsData>) =>
});
return data;
},
queryKey: [createQueryKey('findPetsByTags', options)],
queryKey: findPetsByTagsQueryKey(options),
});

export const getPetByIdQueryKey = (options: Options<GetPetByIdData>) => [
createQueryKey('getPetById', options),
];

export const getPetByIdOptions = (options: Options<GetPetByIdData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -182,9 +198,13 @@ export const getPetByIdOptions = (options: Options<GetPetByIdData>) =>
});
return data;
},
queryKey: [createQueryKey('getPetById', options)],
queryKey: getPetByIdQueryKey(options),
});

export const updatePetWithFormQueryKey = (
options: Options<UpdatePetWithFormData>,
) => [createQueryKey('updatePetWithForm', options)];

export const updatePetWithFormOptions = (
options: Options<UpdatePetWithFormData>,
) =>
Expand All @@ -197,7 +217,7 @@ export const updatePetWithFormOptions = (
});
return data;
},
queryKey: [createQueryKey('updatePetWithForm', options)],
queryKey: updatePetWithFormQueryKey(options),
});

export const updatePetWithFormMutation = () => {
Expand Down Expand Up @@ -234,6 +254,10 @@ export const deletePetMutation = () => {
return mutationOptions;
};

export const uploadFileQueryKey = (options: Options<UploadFileData>) => [
createQueryKey('uploadFile', options),
];

export const uploadFileOptions = (options: Options<UploadFileData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -244,7 +268,7 @@ export const uploadFileOptions = (options: Options<UploadFileData>) =>
});
return data;
},
queryKey: [createQueryKey('uploadFile', options)],
queryKey: uploadFileQueryKey(options),
});

export const uploadFileMutation = () => {
Expand All @@ -264,6 +288,10 @@ export const uploadFileMutation = () => {
return mutationOptions;
};

export const getInventoryQueryKey = (options?: Options) => [
createQueryKey('getInventory', options),
];

export const getInventoryOptions = (options?: Options) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -274,9 +302,13 @@ export const getInventoryOptions = (options?: Options) =>
});
return data;
},
queryKey: [createQueryKey('getInventory', options)],
queryKey: getInventoryQueryKey(options),
});

export const placeOrderQueryKey = (options?: Options<PlaceOrderData>) => [
createQueryKey('placeOrder', options),
];

export const placeOrderOptions = (options?: Options<PlaceOrderData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -287,7 +319,7 @@ export const placeOrderOptions = (options?: Options<PlaceOrderData>) =>
});
return data;
},
queryKey: [createQueryKey('placeOrder', options)],
queryKey: placeOrderQueryKey(options),
});

export const placeOrderMutation = () => {
Expand All @@ -307,6 +339,10 @@ export const placeOrderMutation = () => {
return mutationOptions;
};

export const getOrderByIdQueryKey = (options: Options<GetOrderByIdData>) => [
createQueryKey('getOrderById', options),
];

export const getOrderByIdOptions = (options: Options<GetOrderByIdData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -317,7 +353,7 @@ export const getOrderByIdOptions = (options: Options<GetOrderByIdData>) =>
});
return data;
},
queryKey: [createQueryKey('getOrderById', options)],
queryKey: getOrderByIdQueryKey(options),
});

export const deleteOrderMutation = () => {
Expand All @@ -337,6 +373,10 @@ export const deleteOrderMutation = () => {
return mutationOptions;
};

export const createUserQueryKey = (options?: Options<CreateUserData>) => [
createQueryKey('createUser', options),
];

export const createUserOptions = (options?: Options<CreateUserData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -347,7 +387,7 @@ export const createUserOptions = (options?: Options<CreateUserData>) =>
});
return data;
},
queryKey: [createQueryKey('createUser', options)],
queryKey: createUserQueryKey(options),
});

export const createUserMutation = () => {
Expand All @@ -367,6 +407,10 @@ export const createUserMutation = () => {
return mutationOptions;
};

export const createUsersWithListInputQueryKey = (
options?: Options<CreateUsersWithListInputData>,
) => [createQueryKey('createUsersWithListInput', options)];

export const createUsersWithListInputOptions = (
options?: Options<CreateUsersWithListInputData>,
) =>
Expand All @@ -379,7 +423,7 @@ export const createUsersWithListInputOptions = (
});
return data;
},
queryKey: [createQueryKey('createUsersWithListInput', options)],
queryKey: createUsersWithListInputQueryKey(options),
});

export const createUsersWithListInputMutation = () => {
Expand All @@ -399,6 +443,10 @@ export const createUsersWithListInputMutation = () => {
return mutationOptions;
};

export const loginUserQueryKey = (options?: Options<LoginUserData>) => [
createQueryKey('loginUser', options),
];

export const loginUserOptions = (options?: Options<LoginUserData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -409,9 +457,13 @@ export const loginUserOptions = (options?: Options<LoginUserData>) =>
});
return data;
},
queryKey: [createQueryKey('loginUser', options)],
queryKey: loginUserQueryKey(options),
});

export const logoutUserQueryKey = (options?: Options) => [
createQueryKey('logoutUser', options),
];

export const logoutUserOptions = (options?: Options) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -422,9 +474,13 @@ export const logoutUserOptions = (options?: Options) =>
});
return data;
},
queryKey: [createQueryKey('logoutUser', options)],
queryKey: logoutUserQueryKey(options),
});

export const getUserByNameQueryKey = (options: Options<GetUserByNameData>) => [
createQueryKey('getUserByName', options),
];

export const getUserByNameOptions = (options: Options<GetUserByNameData>) =>
queryOptions({
queryFn: async ({ queryKey }) => {
Expand All @@ -435,7 +491,7 @@ export const getUserByNameOptions = (options: Options<GetUserByNameData>) =>
});
return data;
},
queryKey: [createQueryKey('getUserByName', options)],
queryKey: getUserByNameQueryKey(options),
});

export const updateUserMutation = () => {
Expand Down
Loading