Skip to content

Commit

Permalink
Merge pull request #282 from teamsnap/fix-table-pageingation-buttons
Browse files Browse the repository at this point in the history
fix having decimal for number of pagination buttons
  • Loading branch information
dbhaasis committed Sep 18, 2020
2 parents f4da202 + 8ca1cf1 commit 07fb3bd
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 25 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- `Fixed` for any bug fixes.
- `Security`

## [3.6.2] - 2020-09-18
- https://github.com/teamsnap/teamsnap-ui/pull/282
- `Fixed` bug where paginated table would get error if number of items not divisible by row count
- `Fixed` bug where paginated table row selection did not contain the default page size as an option

## [3.6.1] - 2020-04-09
- https://github.com/teamsnap/teamsnap-ui/pull/271
- `Fixed` bug where table would still try to sort even if external sort was provided
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@teamsnap/teamsnap-ui",
"version": "3.6.1",
"version": "3.6.2",
"description": "a CSS component library for TeamSnap",
"main": "dist/js/index.js",
"types": "dist/js/index.d.ts",
Expand Down
45 changes: 26 additions & 19 deletions src/js/components/Table/Paginated/PaginatedTable.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const columns = [
{ name: "name", label: "Member Name", isSortable: true },
{ name: "gender", label: "Gender", isSortable: true },
{ name: "age", label: "Age", isSortable: true },
{ name: "programs", label: "Active Programs", isSortable: true }
{ name: "programs", label: "Active Programs", isSortable: true },
];

/**
Expand All @@ -26,8 +26,8 @@ const data = Promise.resolve<any[]>([
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Dustin",
Expand All @@ -36,8 +36,8 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Fred",
Expand All @@ -46,8 +46,8 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Bobby",
Expand All @@ -56,8 +56,8 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Christie",
Expand All @@ -66,8 +66,8 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Jenna",
Expand All @@ -76,8 +76,8 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
{
name: "Stacy",
Expand All @@ -86,9 +86,9 @@ const data = Promise.resolve<any[]>([
position: "Coach",
activePrograms: [
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" }
]
}
{ name: "2019 ACC Academy", subtitle: "(Junior Academy Tryout)" },
],
},
]);

/**
Expand All @@ -101,7 +101,12 @@ const data = Promise.resolve<any[]>([
* @param isAscending boolean - true if ascending, false if not.
*/
function loadData(page, itemsPerPage, sortBy, isAscending) {
return data.then(items => [items[page - 1]]);
const startIndex = itemsPerPage * page - itemsPerPage;

return data.then((items) => {
const endIndex = Math.min(items.length, startIndex + itemsPerPage);
return items.slice(startIndex, endIndex);
});
}

/**
Expand All @@ -120,7 +125,9 @@ function mapData(item) {
),
gender: item.gender,
age: `${item.age}`,
programs: item.activePrograms.map((p, idx) => <div key={idx}>{p.name}</div>)
programs: item.activePrograms.map((p, idx) => (
<div key={idx}>{p.name}</div>
)),
};
}

Expand All @@ -129,7 +136,7 @@ stories.add("Default", () => (
columns={columns}
mapDataToRow={mapData}
loadData={loadData}
defaultItemsPerPage={1}
defaultItemsPerPage={2}
totalItems={7} // you'll likely need to calculate this in your component by inspecting the http response.
/>
));
17 changes: 14 additions & 3 deletions src/js/components/Table/Paginated/PaginatedTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,27 @@ const PaginatedTable: React.FunctionComponent<Props> = ({
mapDataToRow,
defaultPage,
defaultItemsPerPage,
totalItems
totalItems,
}) => {
const [
[itemsPerPage, setItemsPerPage],
[currentPage, setCurrentPage]
[currentPage, setCurrentPage],
] = usePagination(defaultItemsPerPage || 10, defaultPage || 1);
const [dataSet, setDataSet] = React.useState([]);
const [sortName, setSortName] = React.useState("");
const [sortAscending, setSortAscending] = React.useState(false);

const defaultPageSizeOptions = [10, 25, 50];
const customOptions =
defaultPageSizeOptions.indexOf(defaultItemsPerPage) < 0
? [defaultItemsPerPage]
: [];
const pageSizeOptions = defaultPageSizeOptions
.concat(customOptions)
.sort((a, b) => {
return a - b;
});

React.useEffect(() => {
const fetchData = async () => {
const data = await loadData(
Expand Down Expand Up @@ -76,7 +87,7 @@ const PaginatedTable: React.FunctionComponent<Props> = ({
/>
<div className="u-spaceLeftSm">
<PaginationSelect
options={[10, 25, 50]}
options={pageSizeOptions}
setItemsPerPage={setItemsPerPage}
/>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/js/components/Table/Paginated/helpers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const getLastPageIndex = (
totalItems: number,
itemsPerPage: number
): number => {
const index = totalItems / itemsPerPage;
const index = Math.ceil(totalItems / itemsPerPage);
return Math.max(1, index);
};

Expand Down

0 comments on commit 07fb3bd

Please sign in to comment.