Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Issues with generating custom pagination infinite queries #139

Open
hanahem opened this issue Aug 16, 2024 · 1 comment
Open

Issues with generating custom pagination infinite queries #139

hanahem opened this issue Aug 16, 2024 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@hanahem
Copy link

hanahem commented Aug 16, 2024

Describe the bug
The codegen tool works wonder. I've been just having a hard time generating working infinite queries.

Am I missing something on how I'm naming my pageParam and nextPageParam?

Expected behavior
From the OpenAPI spec I'd expect to have such an infinite query:

    useInfiniteQuery({
      queryKey: [useGetStuffKey],
      queryFn: ({ pageParam }) =>
        getStuff({ page: pageParam as number, size: PAGE_SIZE }),
      initialPageParam: 1,
      getNextPageParam: (lastPage) =>
        lastPage.items.length === 0 ? undefined : lastPage.pagination.nextPage,
    });

But I get this from the codegen:

export const useGetStuffInfinite = <
  TData = InfiniteData<Common.GetStuffDefaultResponse>,
  TError = unknown,
  TQueryKey extends Array<unknown> = unknown[],
>({ size }: { size: number; },
  queryKey?: TQueryKey,
  options?: Omit<UseInfiniteQueryOptions<TData, TError>, "queryKey" | "queryFn">
) =>
  useInfiniteQuery({
    queryKey: Common.UseGetStuffKeyFn({ size }, queryKey),
    queryFn: ({ pageParam }) =>
      getStuff({ page: pageParam as number, size }) as TData,
    initialPageParam: 1,
    getNextPageParam: (response) => (response as { nextPage: number }).nextPage,
    ...options,
  });

OpenAPI spec file
Here are bits of my openapi spec file, I'm trying to use the /stuff endpoint, I only kept what's necessary here.

/stuff:
    get:
      tags:
        - My Stuff
      operationId: get_stuff
      parameters:
        - name: page
          in: query
          description: The page number
          required: true
          schema:
            type: integer
            format: int32
            minimum: 0
        - name: size
          in: query
          description: The page size
          required: true
          schema:
            type: integer
            format: int32
            minimum: 0
      responses:
        '200':
          description: The Stuff I Need
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedStuff'
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
                
                
# ....
 
 PaginatedStuff:
      type: object
      required:
        - items
        - pagination
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Stuff'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
          
#....

PaginationInfo:
      type: object
      required:
        - size
        - nextPage
      properties:
        nextPage:
          type: integer
          format: int32
          minimum: 0
        size:
          type: integer
          format: int32
          minimum: 0
                

Additional info
If the issue is related to how the API and schema are constructed and isn't fixable through the codegen tool, is there a way to customize the generation of infinite queries to my custom-cut situation?

@7nohe
Copy link
Owner

7nohe commented Sep 16, 2024

@hanahem

It seems that the error occurs when the parameter specified in pageParam is set as required. As a temporary workaround, you can avoid the issue by setting required: false. I will also look into a fix.

    parameters:
        - name: page
          in: query
          description: The page number
          required: false # <- change here
          schema:
            type: integer
            format: int32
            minimum: 0

@7nohe 7nohe added the bug Something isn't working label Sep 16, 2024
@7nohe 7nohe self-assigned this Sep 16, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants