mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 22:27:22 +00:00
feat(frontend): Persisnt "perPage" for tables
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
|||||||
ProjectPermissionCertificateActions,
|
ProjectPermissionCertificateActions,
|
||||||
ProjectPermissionSub
|
ProjectPermissionSub
|
||||||
} from "@app/ee/services/permission/project-permission";
|
} from "@app/ee/services/permission/project-permission";
|
||||||
|
import { NotFoundError } from "@app/lib/errors";
|
||||||
import { TCertificateBodyDALFactory } from "@app/services/certificate/certificate-body-dal";
|
import { TCertificateBodyDALFactory } from "@app/services/certificate/certificate-body-dal";
|
||||||
import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal";
|
import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal";
|
||||||
import { TCertificateAuthorityCertDALFactory } from "@app/services/certificate-authority/certificate-authority-cert-dal";
|
import { TCertificateAuthorityCertDALFactory } from "@app/services/certificate-authority/certificate-authority-cert-dal";
|
||||||
@@ -29,7 +30,6 @@ import {
|
|||||||
TGetCertPrivateKeyDTO,
|
TGetCertPrivateKeyDTO,
|
||||||
TRevokeCertDTO
|
TRevokeCertDTO
|
||||||
} from "./certificate-types";
|
} from "./certificate-types";
|
||||||
import { NotFoundError } from "@app/lib/errors";
|
|
||||||
|
|
||||||
type TCertificateServiceFactoryDep = {
|
type TCertificateServiceFactoryDep = {
|
||||||
certificateDAL: Pick<TCertificateDALFactory, "findOne" | "deleteById" | "update" | "find">;
|
certificateDAL: Pick<TCertificateDALFactory, "findOne" | "deleteById" | "update" | "find">;
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
const TABLE_PREFERENCES_KEY = "userTablePreferences";
|
||||||
|
|
||||||
|
interface TableSpecificPreferences {
|
||||||
|
[preferenceKey: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UserTablePreferences {
|
||||||
|
[tableName: string]: TableSpecificPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieves all table preferences from localStorage
|
||||||
|
const getAllTablePreferences = (): UserTablePreferences => {
|
||||||
|
try {
|
||||||
|
const preferencesString = localStorage.getItem(TABLE_PREFERENCES_KEY);
|
||||||
|
if (preferencesString) {
|
||||||
|
return JSON.parse(preferencesString) as UserTablePreferences;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error reading user table preferences from localStorage:", error);
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Saves all table preferences to localStorage
|
||||||
|
const saveAllTablePreferences = (preferences: UserTablePreferences): void => {
|
||||||
|
try {
|
||||||
|
localStorage.setItem(TABLE_PREFERENCES_KEY, JSON.stringify(preferences));
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error saving user table preferences to localStorage:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Retrieves a specific preference for a given table
|
||||||
|
export const getUserTablePreference = <T>(
|
||||||
|
tableName: string,
|
||||||
|
preferenceKey: string,
|
||||||
|
defaultValue: T
|
||||||
|
): T => {
|
||||||
|
const preferences = getAllTablePreferences();
|
||||||
|
if (
|
||||||
|
preferences &&
|
||||||
|
typeof preferences === "object" &&
|
||||||
|
tableName in preferences &&
|
||||||
|
preferenceKey in preferences[tableName]
|
||||||
|
) {
|
||||||
|
const value = preferences[tableName][preferenceKey];
|
||||||
|
|
||||||
|
if (value !== undefined && value !== null) {
|
||||||
|
return value as T;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Sets a specific preference for a given table and saves it to localStorage
|
||||||
|
export const setUserTablePreference = (
|
||||||
|
tableName: string,
|
||||||
|
preferenceKey: string,
|
||||||
|
value: any
|
||||||
|
): void => {
|
||||||
|
const preferences = getAllTablePreferences();
|
||||||
|
|
||||||
|
if (!preferences[tableName]) {
|
||||||
|
preferences[tableName] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
preferences[tableName][preferenceKey] = value;
|
||||||
|
saveAllTablePreferences(preferences);
|
||||||
|
};
|
||||||
@@ -43,6 +43,7 @@ import {
|
|||||||
useSubscription,
|
useSubscription,
|
||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { useGetKmipClientsByProjectId } from "@app/hooks/api/kmip";
|
import { useGetKmipClientsByProjectId } from "@app/hooks/api/kmip";
|
||||||
@@ -71,7 +72,14 @@ export const KmipClientTable = () => {
|
|||||||
perPage,
|
perPage,
|
||||||
page,
|
page,
|
||||||
setPerPage
|
setPerPage
|
||||||
} = usePagination(KmipClientOrderBy.Name);
|
} = usePagination(KmipClientOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("kmipClientTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("kmipClientTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { data, isPending, isFetching } = useGetKmipClientsByProjectId({
|
const { data, isPending, isFetching } = useGetKmipClientsByProjectId({
|
||||||
projectId,
|
projectId,
|
||||||
@@ -290,7 +298,7 @@ export const KmipClientTable = () => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && kmipClients.length === 0 && (
|
{!isPending && kmipClients.length === 0 && (
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import {
|
|||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { kmsKeyUsageOptions } from "@app/helpers/kms";
|
import { kmsKeyUsageOptions } from "@app/helpers/kms";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, usePopUp, useResetPageHelper, useTimedReset } from "@app/hooks";
|
import { usePagination, usePopUp, useResetPageHelper, useTimedReset } from "@app/hooks";
|
||||||
import { useGetCmeksByProjectId, useUpdateCmek } from "@app/hooks/api/cmeks";
|
import { useGetCmeksByProjectId, useUpdateCmek } from "@app/hooks/api/cmeks";
|
||||||
import { CmekOrderBy, KmsKeyUsage, TCmek } from "@app/hooks/api/cmeks/types";
|
import { CmekOrderBy, KmsKeyUsage, TCmek } from "@app/hooks/api/cmeks/types";
|
||||||
@@ -100,7 +101,14 @@ export const CmekTable = () => {
|
|||||||
perPage,
|
perPage,
|
||||||
page,
|
page,
|
||||||
setPerPage
|
setPerPage
|
||||||
} = usePagination(CmekOrderBy.Name);
|
} = usePagination(CmekOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("cmekClientTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("cmekClientTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { data, isPending, isFetching } = useGetCmeksByProjectId({
|
const { data, isPending, isFetching } = useGetCmeksByProjectId({
|
||||||
projectId,
|
projectId,
|
||||||
@@ -508,7 +516,7 @@ export const CmekTable = () => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && keys.length === 0 && (
|
{!isPending && keys.length === 0 && (
|
||||||
|
|||||||
+10
-2
@@ -34,6 +34,7 @@ import {
|
|||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { OrgPermissionGroupActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
import { OrgPermissionGroupActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetOrganizationGroups, useGetOrgRoles, useUpdateGroup } from "@app/hooks/api";
|
import { useGetOrganizationGroups, useGetOrgRoles, useUpdateGroup } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -103,7 +104,14 @@ export const OrgGroupsTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
setOrderBy,
|
setOrderBy,
|
||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination<GroupsOrderBy>(GroupsOrderBy.Name, { initPerPage: 20 });
|
} = usePagination<GroupsOrderBy>(GroupsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("orgGroupsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("orgGroupsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredGroups = useMemo(() => {
|
const filteredGroups = useMemo(() => {
|
||||||
const filtered = search
|
const filtered = search
|
||||||
@@ -376,7 +384,7 @@ export const OrgGroupsTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredGroups?.length && (
|
{!isPending && !filteredGroups?.length && (
|
||||||
|
|||||||
+11
-2
@@ -42,6 +42,7 @@ import {
|
|||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { OrgPermissionIdentityActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
import { OrgPermissionIdentityActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetOrgRoles, useSearchIdentities, useUpdateIdentity } from "@app/hooks/api";
|
import { useGetOrgRoles, useSearchIdentities, useUpdateIdentity } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -76,7 +77,15 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
perPage,
|
perPage,
|
||||||
page,
|
page,
|
||||||
setPerPage
|
setPerPage
|
||||||
} = usePagination<OrgIdentityOrderBy>(OrgIdentityOrderBy.Name);
|
} = usePagination<OrgIdentityOrderBy>(OrgIdentityOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("identityTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("identityTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const [filteredRoles, setFilteredRoles] = useState<string[]>([]);
|
const [filteredRoles, setFilteredRoles] = useState<string[]>([]);
|
||||||
|
|
||||||
const organizationId = currentOrg?.id || "";
|
const organizationId = currentOrg?.id || "";
|
||||||
@@ -379,7 +388,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && data && data?.identities.length === 0 && (
|
{!isPending && data && data?.identities.length === 0 && (
|
||||||
|
|||||||
+10
-2
@@ -42,6 +42,7 @@ import {
|
|||||||
useSubscription,
|
useSubscription,
|
||||||
useUser
|
useUser
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
useFetchServerStatus,
|
useFetchServerStatus,
|
||||||
@@ -170,7 +171,14 @@ export const OrgMembersTable = ({ handlePopUpOpen, setCompleteInviteLinks }: Pro
|
|||||||
setOrderBy,
|
setOrderBy,
|
||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination<OrgMembersOrderBy>(OrgMembersOrderBy.Name, { initPerPage: 20 });
|
} = usePagination<OrgMembersOrderBy>(OrgMembersOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("orgMembersTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("orgMembersTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredUsers = useMemo(
|
const filteredUsers = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -513,7 +521,7 @@ export const OrgMembersTable = ({ handlePopUpOpen, setCompleteInviteLinks }: Pro
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isMembersLoading && !filteredUsers?.length && (
|
{!isMembersLoading && !filteredUsers?.length && (
|
||||||
|
|||||||
+10
-2
@@ -30,6 +30,7 @@ import {
|
|||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { APP_CONNECTION_MAP, getAppConnectionMethodDetails } from "@app/helpers/appConnections";
|
import { APP_CONNECTION_MAP, getAppConnectionMethodDetails } from "@app/helpers/appConnections";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import { TAppConnection, useListAppConnections } from "@app/hooks/api/appConnections";
|
import { TAppConnection, useListAppConnections } from "@app/hooks/api/appConnections";
|
||||||
import { AppConnection } from "@app/hooks/api/appConnections/enums";
|
import { AppConnection } from "@app/hooks/api/appConnections/enums";
|
||||||
@@ -76,7 +77,14 @@ export const AppConnectionsTable = () => {
|
|||||||
orderBy,
|
orderBy,
|
||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
setOrderBy
|
setOrderBy
|
||||||
} = usePagination<AppConnectionsOrderBy>(AppConnectionsOrderBy.App, { initPerPage: 20 });
|
} = usePagination<AppConnectionsOrderBy>(AppConnectionsOrderBy.App, {
|
||||||
|
initPerPage: getUserTablePreference("appConnectionsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("appConnectionsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredAppConnections = useMemo(
|
const filteredAppConnections = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -282,7 +290,7 @@ export const AppConnectionsTable = () => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredAppConnections?.length && (
|
{!isPending && !filteredAppConnections?.length && (
|
||||||
|
|||||||
+10
-2
@@ -25,6 +25,7 @@ import {
|
|||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { OrgPermissionGroupActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
import { OrgPermissionGroupActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useListGroupUsers, useOidcManageGroupMembershipsEnabled } from "@app/hooks/api";
|
import { useListGroupUsers, useOidcManageGroupMembershipsEnabled } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -57,7 +58,14 @@ export const GroupMembersTable = ({ groupId, groupSlug, handlePopUpOpen }: Props
|
|||||||
offset,
|
offset,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(GroupMembersOrderBy.Name, { initPerPage: 10 });
|
} = usePagination(GroupMembersOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("groupMembersTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("groupMembersTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { currentOrg } = useOrganization();
|
const { currentOrg } = useOrganization();
|
||||||
|
|
||||||
@@ -163,7 +171,7 @@ export const GroupMembersTable = ({ groupId, groupSlug, handlePopUpOpen }: Props
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredGroupMemberships?.length && (
|
{!isPending && !filteredGroupMemberships?.length && (
|
||||||
|
|||||||
+10
-2
@@ -21,6 +21,7 @@ import {
|
|||||||
THead,
|
THead,
|
||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetIdentityProjectMemberships } from "@app/hooks/api";
|
import { useGetIdentityProjectMemberships } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -53,7 +54,14 @@ export const IdentityProjectsTable = ({ identityId, handlePopUpOpen }: Props) =>
|
|||||||
offset,
|
offset,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(IdentityProjectsOrderBy.Name, { initPerPage: 10 });
|
} = usePagination(IdentityProjectsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("identityProjectsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("identityProjectsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredProjectMemberships = useMemo(
|
const filteredProjectMemberships = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -132,7 +140,7 @@ export const IdentityProjectsTable = ({ identityId, handlePopUpOpen }: Props) =>
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredProjectMemberships?.length && (
|
{!isPending && !filteredProjectMemberships?.length && (
|
||||||
|
|||||||
+11
-2
@@ -28,6 +28,7 @@ import {
|
|||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context";
|
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context";
|
||||||
import { getProjectHomePage } from "@app/helpers/project";
|
import { getProjectHomePage } from "@app/helpers/project";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import { useRequestProjectAccess, useSearchProjects } from "@app/hooks/api";
|
import { useRequestProjectAccess, useSearchProjects } from "@app/hooks/api";
|
||||||
import { ProjectType, Workspace } from "@app/hooks/api/workspace/types";
|
import { ProjectType, Workspace } from "@app/hooks/api/workspace/types";
|
||||||
@@ -104,7 +105,15 @@ export const AllProjectView = ({
|
|||||||
limit,
|
limit,
|
||||||
toggleOrderDirection,
|
toggleOrderDirection,
|
||||||
orderDirection
|
orderDirection
|
||||||
} = usePagination("name", { initPerPage: 50 });
|
} = usePagination("name", {
|
||||||
|
initPerPage: getUserTablePreference("allProjectsTable", "perPage", 50)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("allProjectsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { popUp, handlePopUpToggle, handlePopUpOpen } = usePopUp([
|
const { popUp, handlePopUpToggle, handlePopUpOpen } = usePopUp([
|
||||||
"requestAccessConfirmation"
|
"requestAccessConfirmation"
|
||||||
] as const);
|
] as const);
|
||||||
@@ -274,7 +283,7 @@ export const AllProjectView = ({
|
|||||||
count={searchedProjects?.totalCount || 0}
|
count={searchedProjects?.totalCount || 0}
|
||||||
page={page}
|
page={page}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isProjectLoading && !searchedProjects?.totalCount && (
|
{!isProjectLoading && !searchedProjects?.totalCount && (
|
||||||
|
|||||||
+11
-2
@@ -19,6 +19,7 @@ import { OrgPermissionCan } from "@app/components/permissions";
|
|||||||
import { Button, IconButton, Input, Pagination, Skeleton, Tooltip } from "@app/components/v2";
|
import { Button, IconButton, Input, Pagination, Skeleton, Tooltip } from "@app/components/v2";
|
||||||
import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
||||||
import { getProjectHomePage } from "@app/helpers/project";
|
import { getProjectHomePage } from "@app/helpers/project";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetUserWorkspaces } from "@app/hooks/api";
|
import { useGetUserWorkspaces } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -63,7 +64,15 @@ export const MyProjectView = ({
|
|||||||
limit,
|
limit,
|
||||||
toggleOrderDirection,
|
toggleOrderDirection,
|
||||||
orderDirection
|
orderDirection
|
||||||
} = usePagination(ProjectOrderBy.Name, { initPerPage: 24 });
|
} = usePagination(ProjectOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("myProjectsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("myProjectsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { data: projectFavorites, isPending: isProjectFavoritesLoading } =
|
const { data: projectFavorites, isPending: isProjectFavoritesLoading } =
|
||||||
useGetUserProjectFavorites(currentOrg?.id);
|
useGetUserProjectFavorites(currentOrg?.id);
|
||||||
|
|
||||||
@@ -415,7 +424,7 @@ export const MyProjectView = ({
|
|||||||
count={filteredWorkspaces.length}
|
count={filteredWorkspaces.length}
|
||||||
page={page}
|
page={page}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{isWorkspaceEmpty && (
|
{isWorkspaceEmpty && (
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
useOrganization,
|
useOrganization,
|
||||||
useServerConfig
|
useServerConfig
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { withPermission } from "@app/hoc";
|
import { withPermission } from "@app/hoc";
|
||||||
import { usePagination, usePopUp } from "@app/hooks";
|
import { usePagination, usePopUp } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
@@ -28,8 +29,6 @@ import { SecretScanningFilter } from "./components/SecretScanningFilters";
|
|||||||
import { SecretScanningFilterFormData, secretScanningFilterFormSchema } from "./components/types";
|
import { SecretScanningFilterFormData, secretScanningFilterFormSchema } from "./components/types";
|
||||||
import { SecretScanningLogsTable } from "./components";
|
import { SecretScanningLogsTable } from "./components";
|
||||||
|
|
||||||
const PER_PAGE_INIT = 25;
|
|
||||||
|
|
||||||
export const SecretScanningPage = withPermission(
|
export const SecretScanningPage = withPermission(
|
||||||
() => {
|
() => {
|
||||||
const queryParams = useSearch({
|
const queryParams = useSearch({
|
||||||
@@ -49,9 +48,14 @@ export const SecretScanningPage = withPermission(
|
|||||||
|
|
||||||
const { offset, limit, orderBy, setPage, perPage, page, setPerPage } = usePagination(
|
const { offset, limit, orderBy, setPage, perPage, page, setPerPage } = usePagination(
|
||||||
SecretScanningOrderBy.CreatedAt,
|
SecretScanningOrderBy.CreatedAt,
|
||||||
{ initPerPage: PER_PAGE_INIT }
|
{ initPerPage: getUserTablePreference("secretScanningTable", "perPage", 20) }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("secretScanningTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const repositoryNames = watch("repositoryNames");
|
const repositoryNames = watch("repositoryNames");
|
||||||
const resolvedStatus = watch("resolved");
|
const resolvedStatus = watch("resolved");
|
||||||
|
|
||||||
@@ -191,18 +195,16 @@ export const SecretScanningPage = withPermission(
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<SecretScanningLogsTable gitRisks={risksData?.risks} isPending={isPending} />
|
<SecretScanningLogsTable gitRisks={risksData?.risks} isPending={isPending} />
|
||||||
{!isPending &&
|
{!isPending && risksData?.totalCount !== undefined && (
|
||||||
risksData?.totalCount !== undefined &&
|
<Pagination
|
||||||
risksData.totalCount >= PER_PAGE_INIT && (
|
className="rounded-md"
|
||||||
<Pagination
|
count={risksData.totalCount}
|
||||||
className="rounded-md"
|
page={page}
|
||||||
count={risksData.totalCount}
|
perPage={perPage}
|
||||||
page={page}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
perPage={perPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
/>
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
)}
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
|
import { useEffect } from "react";
|
||||||
import { Controller, useForm } from "react-hook-form";
|
import { Controller, useForm } from "react-hook-form";
|
||||||
import { zodResolver } from "@hookform/resolvers/zod";
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { useEffect } from "react";
|
|
||||||
|
|
||||||
import { createNotification } from "@app/components/notifications";
|
import { createNotification } from "@app/components/notifications";
|
||||||
import { OrgPermissionCan } from "@app/components/permissions";
|
import { OrgPermissionCan } from "@app/components/permissions";
|
||||||
|
|||||||
+10
-2
@@ -20,6 +20,7 @@ import {
|
|||||||
THead,
|
THead,
|
||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { OrgUser } from "@app/hooks/api/types";
|
import { OrgUser } from "@app/hooks/api/types";
|
||||||
@@ -52,7 +53,14 @@ export const UserGroupsTable = ({ handlePopUpOpen, orgMembership }: Props) => {
|
|||||||
offset,
|
offset,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(UserGroupsOrderBy.Name, { initPerPage: 10 });
|
} = usePagination(UserGroupsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("userGroupsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("userGroupsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredGroupMemberships = useMemo(
|
const filteredGroupMemberships = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -119,7 +127,7 @@ export const UserGroupsTable = ({ handlePopUpOpen, orgMembership }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredGroupMemberships?.length && (
|
{!isPending && !filteredGroupMemberships?.length && (
|
||||||
|
|||||||
+10
-2
@@ -22,6 +22,7 @@ import {
|
|||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { useOrganization } from "@app/context";
|
import { useOrganization } from "@app/context";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetOrgMembershipProjectMemberships } from "@app/hooks/api";
|
import { useGetOrgMembershipProjectMemberships } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -54,7 +55,14 @@ export const UserProjectsTable = ({ membershipId, handlePopUpOpen }: Props) => {
|
|||||||
offset,
|
offset,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(UserProjectsOrderBy.Name, { initPerPage: 10 });
|
} = usePagination(UserProjectsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("userProjectsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("userProjectsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { data: projectMemberships = [], isPending } = useGetOrgMembershipProjectMemberships(
|
const { data: projectMemberships = [], isPending } = useGetOrgMembershipProjectMemberships(
|
||||||
orgId,
|
orgId,
|
||||||
@@ -136,7 +144,7 @@ export const UserProjectsTable = ({ membershipId, handlePopUpOpen }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredProjectMemberships?.length && (
|
{!isPending && !filteredProjectMemberships?.length && (
|
||||||
|
|||||||
+10
-2
@@ -27,6 +27,7 @@ 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 { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useListWorkspaceGroups } from "@app/hooks/api";
|
import { useListWorkspaceGroups } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -62,7 +63,14 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
orderDirection,
|
orderDirection,
|
||||||
orderBy,
|
orderBy,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(GroupsOrderBy.Name, { initPerPage: 20 });
|
} = usePagination(GroupsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("projectGroupsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("projectGroupsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const { data: groupMemberships = [], isPending } = useListWorkspaceGroups(
|
const { data: groupMemberships = [], isPending } = useListWorkspaceGroups(
|
||||||
currentWorkspace?.id || ""
|
currentWorkspace?.id || ""
|
||||||
@@ -183,7 +191,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredGroupMemberships?.length && (
|
{!isPending && !filteredGroupMemberships?.length && (
|
||||||
|
|||||||
+10
-2
@@ -42,6 +42,7 @@ import {
|
|||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
||||||
import { formatProjectRoleName } from "@app/helpers/roles";
|
import { formatProjectRoleName } from "@app/helpers/roles";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { withProjectPermission } from "@app/hoc";
|
import { withProjectPermission } from "@app/hoc";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMemberships } from "@app/hooks/api";
|
import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMemberships } from "@app/hooks/api";
|
||||||
@@ -72,7 +73,14 @@ export const IdentityTab = withProjectPermission(
|
|||||||
perPage,
|
perPage,
|
||||||
page,
|
page,
|
||||||
setPerPage
|
setPerPage
|
||||||
} = usePagination(ProjectIdentityOrderBy.Name);
|
} = usePagination(ProjectIdentityOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("projectIdentityTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("projectIdentityTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const workspaceId = currentWorkspace?.id ?? "";
|
const workspaceId = currentWorkspace?.id ?? "";
|
||||||
|
|
||||||
@@ -403,7 +411,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && data && data?.identityMemberships.length === 0 && (
|
{!isPending && data && data?.identityMemberships.length === 0 && (
|
||||||
|
|||||||
+3
-2
@@ -51,6 +51,7 @@ import {
|
|||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { formatProjectRoleName } from "@app/helpers/roles";
|
import { formatProjectRoleName } from "@app/helpers/roles";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api";
|
import { useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
@@ -101,12 +102,12 @@ export const MembersTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination<MembersOrderBy>(MembersOrderBy.Name, {
|
} = usePagination<MembersOrderBy>(MembersOrderBy.Name, {
|
||||||
initPerPage: parseInt(localStorage.getItem("PROJECT_MEMBERS_TABLE_PER_PAGE") || "20", 10)
|
initPerPage: getUserTablePreference("projectMembersTable", "perPage", 20)
|
||||||
});
|
});
|
||||||
|
|
||||||
const handlePerPageChange = (newPerPage: number) => {
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
setPerPage(newPerPage);
|
setPerPage(newPerPage);
|
||||||
localStorage.setItem("PROJECT_MEMBERS_TABLE_PER_PAGE", newPerPage.toString());
|
setUserTablePreference("projectMembersTable", "perPage", newPerPage);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { data: members = [], isPending: isMembersLoading } = useGetWorkspaceUsers(
|
const { data: members = [], isPending: isMembersLoading } = useGetWorkspaceUsers(
|
||||||
|
|||||||
+10
-2
@@ -32,6 +32,7 @@ import {
|
|||||||
Tooltip,
|
Tooltip,
|
||||||
Tr
|
Tr
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { useSyncIntegration } from "@app/hooks/api/integrations/queries";
|
import { useSyncIntegration } from "@app/hooks/api/integrations/queries";
|
||||||
@@ -110,7 +111,14 @@ export const IntegrationsTable = ({
|
|||||||
orderBy,
|
orderBy,
|
||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
setOrderBy
|
setOrderBy
|
||||||
} = usePagination<IntegrationsOrderBy>(IntegrationsOrderBy.App, { initPerPage: 20 });
|
} = usePagination<IntegrationsOrderBy>(IntegrationsOrderBy.App, {
|
||||||
|
initPerPage: getUserTablePreference("integrationsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("integrationsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (integrations?.some((integration) => integration.isSynced === false))
|
if (integrations?.some((integration) => integration.isSynced === false))
|
||||||
@@ -437,7 +445,7 @@ export const IntegrationsTable = ({
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isLoading && !filteredIntegrations?.length && (
|
{!isLoading && !filteredIntegrations?.length && (
|
||||||
|
|||||||
+10
-2
@@ -38,6 +38,7 @@ import {
|
|||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs";
|
import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import {
|
import {
|
||||||
@@ -119,7 +120,14 @@ export const SecretSyncsTable = ({ secretSyncs }: Props) => {
|
|||||||
orderBy,
|
orderBy,
|
||||||
setOrderDirection,
|
setOrderDirection,
|
||||||
setOrderBy
|
setOrderBy
|
||||||
} = usePagination<SecretSyncsOrderBy>(SecretSyncsOrderBy.Name, { initPerPage: 20 });
|
} = usePagination<SecretSyncsOrderBy>(SecretSyncsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("secretSyncTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("secretSyncTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredSecretSyncs = useMemo(
|
const filteredSecretSyncs = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -465,7 +473,7 @@ export const SecretSyncsTable = ({ secretSyncs }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!filteredSecretSyncs?.length && (
|
{!filteredSecretSyncs?.length && (
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import {
|
|||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { ProjectPermissionSecretRotationActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionSecretRotationActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
useCreateFolder,
|
useCreateFolder,
|
||||||
@@ -180,7 +181,14 @@ export const OverviewPage = () => {
|
|||||||
page,
|
page,
|
||||||
setPerPage,
|
setPerPage,
|
||||||
orderBy
|
orderBy
|
||||||
} = usePagination<DashboardSecretsOrderBy>(DashboardSecretsOrderBy.Name);
|
} = usePagination<DashboardSecretsOrderBy>(DashboardSecretsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("secretOverviewTable", "perPage", 100)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("secretOverviewTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const resetSelectedEntries = useCallback(() => {
|
const resetSelectedEntries = useCallback(() => {
|
||||||
setSelectedEntries({
|
setSelectedEntries({
|
||||||
@@ -1416,7 +1424,7 @@ export const OverviewPage = () => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import {
|
|||||||
ProjectPermissionSecretActions,
|
ProjectPermissionSecretActions,
|
||||||
ProjectPermissionSecretRotationActions
|
ProjectPermissionSecretRotationActions
|
||||||
} from "@app/context/ProjectPermissionContext/types";
|
} from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
useGetImportedSecretsSingleEnv,
|
useGetImportedSecretsSingleEnv,
|
||||||
@@ -98,7 +99,14 @@ const Page = () => {
|
|||||||
page,
|
page,
|
||||||
setPerPage,
|
setPerPage,
|
||||||
orderBy
|
orderBy
|
||||||
} = usePagination<DashboardSecretsOrderBy>(DashboardSecretsOrderBy.Name);
|
} = usePagination<DashboardSecretsOrderBy>(DashboardSecretsOrderBy.Name, {
|
||||||
|
initPerPage: getUserTablePreference("secretDashboardTable", "perPage", 100)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("secretDashboardTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const [snapshotId, setSnapshotId] = useState<string | null>(null);
|
const [snapshotId, setSnapshotId] = useState<string | null>(null);
|
||||||
const isRollbackMode = Boolean(snapshotId);
|
const isRollbackMode = Boolean(snapshotId);
|
||||||
@@ -558,7 +566,7 @@ const Page = () => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={(newPage) => setPage(newPage)}
|
onChangePage={(newPage) => setPage(newPage)}
|
||||||
onChangePerPage={(newPerPage) => setPerPage(newPerPage)}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<Modal
|
<Modal
|
||||||
|
|||||||
+11
-3
@@ -25,9 +25,10 @@ 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 { getUserTablePreference, setUserTablePreference } from "@app/helpers/userTablePreferences";
|
||||||
import { usePagination, useResetPageHelper } from "@app/hooks";
|
import { usePagination, useResetPageHelper } from "@app/hooks";
|
||||||
import { useGetWsTags } from "@app/hooks/api";
|
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
|
import { useGetWsTags } from "@app/hooks/api/tags";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -61,7 +62,14 @@ export const SecretTagsTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
offset,
|
offset,
|
||||||
orderDirection,
|
orderDirection,
|
||||||
toggleOrderDirection
|
toggleOrderDirection
|
||||||
} = usePagination(TagsOrderBy.Slug, { initPerPage: 10 });
|
} = usePagination(TagsOrderBy.Slug, {
|
||||||
|
initPerPage: getUserTablePreference("secretTagsTable", "perPage", 20)
|
||||||
|
});
|
||||||
|
|
||||||
|
const handlePerPageChange = (newPerPage: number) => {
|
||||||
|
setPerPage(newPerPage);
|
||||||
|
setUserTablePreference("secretTagsTable", "perPage", newPerPage);
|
||||||
|
};
|
||||||
|
|
||||||
const filteredTags = useMemo(
|
const filteredTags = useMemo(
|
||||||
() =>
|
() =>
|
||||||
@@ -151,7 +159,7 @@ export const SecretTagsTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
page={page}
|
page={page}
|
||||||
perPage={perPage}
|
perPage={perPage}
|
||||||
onChangePage={setPage}
|
onChangePage={setPage}
|
||||||
onChangePerPage={setPerPage}
|
onChangePerPage={handlePerPageChange}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!isPending && !filteredTags?.length && (
|
{!isPending && !filteredTags?.length && (
|
||||||
|
|||||||
Reference in New Issue
Block a user