improvements: use stored preferred page size for project roles table and add reset helper

This commit is contained in:
Scott Wilson
2025-06-16 16:36:03 -07:00
parent 1e07c2fe23
commit 4afe2f2377
@@ -39,7 +39,12 @@ import {
Tr Tr
} from "@app/components/v2"; } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
import { usePagination, usePopUp } from "@app/hooks"; import {
getUserTablePreference,
PreferenceKey,
setUserTablePreference
} from "@app/helpers/userTablePreferences";
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
import { useDeleteProjectRole, useGetProjectRoles } from "@app/hooks/api"; import { useDeleteProjectRole, useGetProjectRoles } from "@app/hooks/api";
import { OrderByDirection } from "@app/hooks/api/generic/types"; import { OrderByDirection } from "@app/hooks/api/generic/types";
import { ProjectMembershipRole, TProjectRole } from "@app/hooks/api/roles/types"; import { ProjectMembershipRole, TProjectRole } from "@app/hooks/api/roles/types";
@@ -93,7 +98,14 @@ export const ProjectRoleList = () => {
setPerPage, setPerPage,
setPage, setPage,
offset offset
} = usePagination<RolesOrderBy>(RolesOrderBy.Name); } = usePagination<RolesOrderBy>(RolesOrderBy.Name, {
initPerPage: getUserTablePreference("projectRolesTable", PreferenceKey.PerPage, 20)
});
const handlePerPageChange = (newPerPage: number) => {
setPerPage(newPerPage);
setUserTablePreference("projectRolesTable", PreferenceKey.PerPage, newPerPage);
};
const filteredRoles = useMemo( const filteredRoles = useMemo(
() => () =>
@@ -117,10 +129,16 @@ export const ProjectRoleList = () => {
default: default:
return roleOne.name.toLowerCase().localeCompare(roleTwo.name.toLowerCase()); return roleOne.name.toLowerCase().localeCompare(roleTwo.name.toLowerCase());
} }
}), }) ?? [],
[roles, orderDirection, search, orderBy] [roles, orderDirection, search, orderBy]
); );
useResetPageHelper({
totalCount: filteredRoles.length,
offset,
setPage
});
const handleSort = (column: RolesOrderBy) => { const handleSort = (column: RolesOrderBy) => {
if (column === orderBy) { if (column === orderBy) {
toggleOrderDirection(); toggleOrderDirection();
@@ -143,7 +161,7 @@ export const ProjectRoleList = () => {
<ProjectPermissionCan I={ProjectPermissionActions.Create} a={ProjectPermissionSub.Role}> <ProjectPermissionCan I={ProjectPermissionActions.Create} a={ProjectPermissionSub.Role}>
{(isAllowed) => ( {(isAllowed) => (
<Button <Button
colorSchema="primary" colorSchema="secondary"
type="submit" type="submit"
leftIcon={<FontAwesomeIcon icon={faPlus} />} leftIcon={<FontAwesomeIcon icon={faPlus} />}
onClick={() => handlePopUpOpen("role")} onClick={() => handlePopUpOpen("role")}
@@ -319,7 +337,7 @@ export const ProjectRoleList = () => {
page={page} page={page}
perPage={perPage} perPage={perPage}
onChangePage={setPage} onChangePage={setPage}
onChangePerPage={setPerPage} onChangePerPage={handlePerPageChange}
/> />
)} )}
{!filteredRoles?.length && !isRolesLoading && ( {!filteredRoles?.length && !isRolesLoading && (