Files
formbricks-formbricks/apps/web/lib/members.ts
T
Neil Chauhan 27023eacf8 Add roles to users you invite to your team (#404)
* Add method to check if user is admin or owner

* Add method to enable role based member invites

* Add Select Control element to UI to handle role based invite

* Add flag to allow add member feature for owner or admin level users only

* Fix error with role select element

* Add UI view to modify membership

* Add RoleElement component to handle the Role display

* Integrate api for Updating Accepted Member Role

* Integrate api for Updating Invitee's Role

* Resolve PR comments and merge conflicts
2023-06-20 12:21:25 +02:00

100 lines
2.7 KiB
TypeScript

import useSWR from "swr";
import { fetcher } from "@formbricks/lib/fetcher";
export const useMembers = (environmentId: string) => {
const { data, isLoading, error, mutate, isValidating } = useSWR(
`/api/v1/environments/${environmentId}/members/`,
fetcher
);
return {
team: data,
isLoadingTeam: isLoading,
isErrorTeam: error,
isValidatingTeam: isValidating,
mutateTeam: mutate,
};
};
export const updateMemberRole = async (teamId: string, userId: string, role: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/members/${userId}/`, {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ role }),
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};
export const removeMember = async (teamId: string, userId: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/members/${userId}/`, {
method: "DELETE",
headers: { "Content-Type": "application/json" },
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};
// update invitee's role
export const updateInviteeRole = async (teamId: string, inviteId: string, role: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/invite/${inviteId}/`, {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ role }),
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};
export const deleteInvite = async (teamId: string, inviteId: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/invite/${inviteId}/`, {
method: "DELETE",
headers: { "Content-Type": "application/json" },
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};
export const addMember = async (teamId: string, data: { name: string; email: string }) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/invite/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};
export const resendInvite = async (teamId: string, inviteId: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/invite/${inviteId}`, {
method: "PUT",
headers: { "Content-Type": "application/json" },
});
return result.status === 200;
} catch (error) {
console.error(error);
return false;
}
};