From 8473589e3a7d8f014d5ae2781fa53ac1f75b0a62 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Wed, 22 Jul 2020 18:14:08 -0700 Subject: [PATCH] feat: add PaginationNav component --- src/PaginationNav/PaginationItem.svelte | 18 +++ src/PaginationNav/PaginationNav.Story.svelte | 31 +++++ src/PaginationNav/PaginationNav.stories.js | 17 +++ src/PaginationNav/PaginationNav.svelte | 129 +++++++++++++++++++ src/PaginationNav/PaginationOverflow.svelte | 47 +++++++ src/PaginationNav/index.js | 1 + src/index.js | 1 + 7 files changed, 244 insertions(+) create mode 100644 src/PaginationNav/PaginationItem.svelte create mode 100644 src/PaginationNav/PaginationNav.Story.svelte create mode 100644 src/PaginationNav/PaginationNav.stories.js create mode 100644 src/PaginationNav/PaginationNav.svelte create mode 100644 src/PaginationNav/PaginationOverflow.svelte create mode 100644 src/PaginationNav/index.js diff --git a/src/PaginationNav/PaginationItem.svelte b/src/PaginationNav/PaginationItem.svelte new file mode 100644 index 00000000..9463440d --- /dev/null +++ b/src/PaginationNav/PaginationItem.svelte @@ -0,0 +1,18 @@ + + +
  • + +
  • diff --git a/src/PaginationNav/PaginationNav.Story.svelte b/src/PaginationNav/PaginationNav.Story.svelte new file mode 100644 index 00000000..e5a034a4 --- /dev/null +++ b/src/PaginationNav/PaginationNav.Story.svelte @@ -0,0 +1,31 @@ + + +
    + { + console.log('on:change', detail); + }} + on:click:button--previous={({ detail }) => { + console.log('button--previous', detail); + }} + on:click:button--next={({ detail }) => { + console.log('button--next', detail); + }} /> +
    Bound page index: {page}
    + +
    diff --git a/src/PaginationNav/PaginationNav.stories.js b/src/PaginationNav/PaginationNav.stories.js new file mode 100644 index 00000000..3078e824 --- /dev/null +++ b/src/PaginationNav/PaginationNav.stories.js @@ -0,0 +1,17 @@ +import { withKnobs, number, boolean } from "@storybook/addon-knobs"; +import Component from "./PaginationNav.Story.svelte"; + +export default { title: "PaginationNav", decorators: [withKnobs] }; + +export const Default = () => ({ + Component, + props: { + page: number("Current page index (page)", 0), + total: number("Total number of items (total)", 10), + shown: number("Number of items to be shown (minimum 4) (shown)", 10), + loop: boolean( + "Allow user to loop through the items when reaching first / last (loop)", + false + ), + }, +}); diff --git a/src/PaginationNav/PaginationNav.svelte b/src/PaginationNav/PaginationNav.svelte new file mode 100644 index 00000000..9c0e8eb0 --- /dev/null +++ b/src/PaginationNav/PaginationNav.svelte @@ -0,0 +1,129 @@ + + + diff --git a/src/PaginationNav/PaginationOverflow.svelte b/src/PaginationNav/PaginationOverflow.svelte new file mode 100644 index 00000000..97f59323 --- /dev/null +++ b/src/PaginationNav/PaginationOverflow.svelte @@ -0,0 +1,47 @@ + + +{#if count > 1} +
  • +
    + + +
    + +
    +
    +
  • +{:else if count === 1} + { + dispatch('select', { index: fromIndex }); + }}> + Page + +{/if} diff --git a/src/PaginationNav/index.js b/src/PaginationNav/index.js new file mode 100644 index 00000000..2e72aacf --- /dev/null +++ b/src/PaginationNav/index.js @@ -0,0 +1 @@ +export { default as PaginationNav } from "./PaginationNav.svelte"; diff --git a/src/index.js b/src/index.js index ff7e94a8..aa036dfe 100644 --- a/src/index.js +++ b/src/index.js @@ -64,6 +64,7 @@ export { NumberInput, NumberInputSkeleton } from "./NumberInput"; export { OrderedList } from "./OrderedList"; export { OverflowMenu, OverflowMenuItem } from "./OverflowMenu"; export { Pagination, PaginationSkeleton } from "./Pagination"; +export { PaginationNav } from "./PaginationNav"; export { ProgressIndicator, ProgressIndicatorSkeleton,