Skip to content
New issue

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

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

Already on GitHub? Sign in 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants