mirror of
https://github.com/hanzoai/o11y-components.git
synced 2026-10-30 14:54:15 +00:00
178 lines
4.2 KiB
Plaintext
178 lines
4.2 KiB
Plaintext
import { Meta, Controls, Primary } from '@storybook/addon-docs/blocks';
|
|
import * as PaginationStories from './pagination.stories';
|
|
import * as PaginationUrlStories from './pagination-url.stories';
|
|
import * as PaginationContainerStories from './pagination-container.stories';
|
|
import * as PaginationContentStories from './pagination-content.stories';
|
|
import * as PaginationItemStories from './pagination-item.stories';
|
|
import * as PaginationLinkStories from './pagination-link.stories';
|
|
import * as PaginationPreviousStories from './pagination-previous.stories';
|
|
import * as PaginationNextStories from './pagination-next.stories';
|
|
import * as PaginationEllipsisStories from './pagination-ellipsis.stories';
|
|
|
|
<Meta of={PaginationStories} />
|
|
|
|
# Pagination
|
|
|
|
A flexible pagination component for navigating through multi-page content.
|
|
|
|
## How to use
|
|
|
|
### Pagination (all-in-one)
|
|
|
|
Use `Pagination` for standard pagination with minimal setup. It renders previous/next buttons and page numbers automatically.
|
|
|
|
```tsx
|
|
import { Pagination } from '@signozhq/ui';
|
|
import { useState } from 'react';
|
|
|
|
export default function MyComponent() {
|
|
const [currentPage, setCurrentPage] = useState(1);
|
|
|
|
return (
|
|
<Pagination
|
|
total={100}
|
|
pageSize={10}
|
|
current={currentPage}
|
|
onPageChange={(page) => setCurrentPage(page)}
|
|
align="center"
|
|
/>
|
|
);
|
|
}
|
|
```
|
|
|
|
Uncontrolled usage:
|
|
|
|
```tsx
|
|
<Pagination total={100} pageSize={10} defaultCurrent={1} />
|
|
```
|
|
|
|
<Primary />
|
|
|
|
## Pagination Props
|
|
|
|
<Controls of={PaginationStories.Default} />
|
|
|
|
## PaginationUrl
|
|
|
|
URL-driven pagination that synchronizes the current page with a query parameter using `nuqs`. Useful for deep-linking or coordinating with browser back/forward.
|
|
|
|
> This component requires setup with [nuqs](https://nuqs.dev/).
|
|
|
|
```tsx
|
|
import { PaginationUrl } from '@signozhq/ui';
|
|
import { NuqsAdapter } from 'nuqs/adapters/react';
|
|
|
|
export default function MyComponent() {
|
|
return (
|
|
<NuqsAdapter>
|
|
<PaginationUrl
|
|
urlKey="page"
|
|
total={100}
|
|
pageSize={10}
|
|
align="center"
|
|
/>
|
|
</NuqsAdapter>
|
|
);
|
|
}
|
|
```
|
|
|
|
With custom `urlKey` to avoid conflicts:
|
|
|
|
```tsx
|
|
<PaginationUrl
|
|
urlKey="logs-page"
|
|
total={500}
|
|
pageSize={25}
|
|
align="center"
|
|
/>
|
|
```
|
|
|
|
## PaginationUrl Props
|
|
|
|
<Controls of={PaginationUrlStories.Default} />
|
|
|
|
## Primitive composition
|
|
|
|
For full control, use the low-level building blocks: `PaginationContainer`, `PaginationContent`, `PaginationItem`, `PaginationLink`, `PaginationPrevious`, `PaginationNext`, and `PaginationEllipsis`.
|
|
|
|
```tsx
|
|
import {
|
|
PaginationContainer,
|
|
PaginationContent,
|
|
PaginationItem,
|
|
PaginationLink,
|
|
PaginationPrevious,
|
|
PaginationNext,
|
|
PaginationEllipsis,
|
|
} from '@signozhq/ui';
|
|
import { useState } from 'react';
|
|
|
|
export default function MyComponent() {
|
|
const [current, setCurrent] = useState(1);
|
|
const totalPages = 10;
|
|
|
|
return (
|
|
<PaginationContainer align="center">
|
|
<PaginationContent>
|
|
<PaginationItem>
|
|
<PaginationPrevious
|
|
onClick={() => setCurrent((p) => Math.max(1, p - 1))}
|
|
disabled={current === 1}
|
|
/>
|
|
</PaginationItem>
|
|
<PaginationItem>
|
|
<PaginationLink isActive={current === 1} onClick={() => setCurrent(1)}>
|
|
1
|
|
</PaginationLink>
|
|
</PaginationItem>
|
|
<PaginationItem>
|
|
<PaginationEllipsis />
|
|
</PaginationItem>
|
|
<PaginationItem>
|
|
<PaginationLink
|
|
isActive={current === totalPages}
|
|
onClick={() => setCurrent(totalPages)}
|
|
>
|
|
{totalPages}
|
|
</PaginationLink>
|
|
</PaginationItem>
|
|
<PaginationItem>
|
|
<PaginationNext
|
|
onClick={() => setCurrent((p) => Math.min(totalPages, p + 1))}
|
|
disabled={current === totalPages}
|
|
/>
|
|
</PaginationItem>
|
|
</PaginationContent>
|
|
</PaginationContainer>
|
|
);
|
|
}
|
|
```
|
|
|
|
## PaginationContainer Props
|
|
|
|
<Controls of={PaginationContainerStories.Default} />
|
|
|
|
## PaginationContent Props
|
|
|
|
<Controls of={PaginationContentStories.Default} />
|
|
|
|
## PaginationItem Props
|
|
|
|
<Controls of={PaginationItemStories.Default} />
|
|
|
|
## PaginationLink Props
|
|
|
|
<Controls of={PaginationLinkStories.Default} />
|
|
|
|
## PaginationPrevious Props
|
|
|
|
<Controls of={PaginationPreviousStories.Default} />
|
|
|
|
## PaginationNext Props
|
|
|
|
<Controls of={PaginationNextStories.Default} />
|
|
|
|
## PaginationEllipsis Props
|
|
|
|
<Controls of={PaginationEllipsisStories.Default} />
|