Merge pull request #2321 from Infisical/daniel/specify-roles-and-projects

Feat: Select roles & projects when inviting members to organization
This commit is contained in:
Daniel Hougaard
2024-08-26 15:00:39 +04:00
committed by GitHub
38 changed files with 1095 additions and 501 deletions
+1
View File
@@ -93,6 +93,7 @@ export type CompleteAccountDTO = {
salt: string;
verifier: string;
password: string;
tokenMetadata?: string;
};
export type CompleteAccountSignupDTO = CompleteAccountDTO & {
+1 -1
View File
@@ -47,7 +47,7 @@ export const roleQueryKeys = {
["user-project-permissions", { workspaceId }] as const
};
const getProjectRoles = async (projectId: string) => {
export const getProjectRoles = async (projectId: string) => {
const { data } = await apiRequest.get<{ roles: Array<Omit<TProjectRole, "permissions">> }>(
`/api/v1/workspace/${projectId}/roles`
);
+3 -2
View File
@@ -6,7 +6,7 @@ export {
} from "./mutation";
export {
fetchOrgUsers,
useAddUserToOrg,
useAddUsersToOrg,
useCreateAPIKey,
useDeleteAPIKey,
useDeleteMe,
@@ -26,4 +26,5 @@ export {
useRevokeMySessions,
useUpdateMfaEnabled,
useUpdateOrgMembership,
useUpdateUserAuthMethods} from "./queries";
useUpdateUserAuthMethods
} from "./queries";
+5 -2
View File
@@ -157,12 +157,15 @@ export const useGetOrgUsers = (orgId: string) =>
// mutation
// TODO(akhilmhdh): move all mutation to mutation file
export const useAddUserToOrg = () => {
export const useAddUsersToOrg = () => {
const queryClient = useQueryClient();
type Response = {
data: {
message: string;
completeInviteLink: string | undefined;
completeInviteLinks?: {
email: string;
link: string;
}[];
};
};
+4 -1
View File
@@ -149,7 +149,10 @@ export type DeletOrgMembershipDTO = {
};
export type AddUserToOrgDTO = {
inviteeEmail: string;
inviteeEmails: string[];
projectIds?: string[];
projectRoleSlug?: string;
organizationRoleSlug: string;
organizationId: string;
};
+8 -4
View File
@@ -138,8 +138,12 @@ export const useGetUpgradeProjectStatus = ({
});
};
const fetchUserWorkspaces = async () => {
const { data } = await apiRequest.get<{ workspaces: Workspace[] }>("/api/v1/workspace");
const fetchUserWorkspaces = async (includeRoles?: boolean) => {
const { data } = await apiRequest.get<{ workspaces: Workspace[] }>("/api/v1/workspace", {
params: {
includeRoles
}
});
return data.workspaces;
};
@@ -171,8 +175,8 @@ export const useGetWorkspaceById = (
});
};
export const useGetUserWorkspaces = () =>
useQuery(workspaceKeys.getAllUserWorkspace, fetchUserWorkspaces);
export const useGetUserWorkspaces = (includeRoles?: boolean) =>
useQuery(workspaceKeys.getAllUserWorkspace, () => fetchUserWorkspaces(includeRoles));
const fetchUserWorkspaceMemberships = async (orgId: string) => {
const { data } = await apiRequest.get<Record<string, Workspace[]>>(
@@ -1,3 +1,5 @@
import { TProjectRole } from "../roles/types";
export enum ProjectVersion {
V1 = 1,
V2 = 2,
@@ -22,6 +24,8 @@ export type Workspace = {
auditLogsRetentionDays: number;
slug: string;
createdAt: string;
roles?: TProjectRole[];
};
export type WorkspaceEnv = {
+10 -1
View File
@@ -8,6 +8,7 @@ type UseToggleReturn = [
on: VoidFn;
off: VoidFn;
toggle: VoidFn;
timedToggle: (timeout?: number) => void;
}
];
@@ -26,5 +27,13 @@ export const useToggle = (initialState = false): UseToggleReturn => {
setValue((prev) => (typeof isOpen === "boolean" ? isOpen : !prev));
}, []);
return [value, { on, off, toggle }];
const timedToggle = useCallback((timeout = 2000) => {
setValue((prev) => !prev);
setTimeout(() => {
setValue(false);
}, timeout);
}, []);
return [value, { on, off, toggle, timedToggle }];
};