Files
formbricks-formbricks/apps/web/lib/members.ts
Shubham Palriwala 13afba7615 feat: move env vars from build-time to run-time to better support self-hosting environments (#789)
* feat: privacy, imprint, and terms URL env vars now do not need rebuilding

* feat: disable_singup env var now do not need rebuilding

* feat: password_reset_disabled env var now do not need rebuilding

* feat: email_verification_disabled env var now do not need rebuilding

* feat: github_oauth & google_oauth env var now do not need rebuilding

* feat: move logic of env vars to serverside and send boolean client-side

* feat: invite_disabled env var now do not need rebuilding

* feat: rename vars logically

* feat: migration guide

* feat: update docker-compose as per v1.1

* deprecate: unused NEXT_PUBLIC_VERCEL_URL & VERCEL_URL

* deprecate: unused RAILWAY_STATIC_URL

* deprecate: unused RENDER_EXTERNAL_URL

* deprecate: unused HEROKU_APP_NAME

* fix: define WEBAPP_URL & replace NEXT_WEBAPP_URL with it

* migrate: NEXT_PUBLIC_IS_FORMBRICKS_CLOUD to IS_FORMBRICKS_CLOUD

* chore: move all env parsing to a constants.ts from page files

* feat: migrate client side envs to server side

* redo: isFormbricksCloud to navbar serverside page

* fix: constants is now a server only file

* fix: removal of use swr underway

* fix: move 1 tag away from swr to service

* feat: move away from tags swr

* feat: move away from surveys  swr

* feat: move away from eventClass swr

* feat: move away from event swr

* fix: make constants server-only

* remove comments from .env.example, use constants in MetaInformation

* clean up services

* rename tag function

* fix build error

* fix smaller bugs, fix Response % not working in summary

---------

Co-authored-by: Matthias Nannt <mail@matthiasnannt.com>
2023-09-30 21:40:59 +02:00

114 lines
3.1 KiB
TypeScript

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 transferOwnership = async (teamId: string, userId: string) => {
try {
const result = await fetch(`/api/v1/teams/${teamId}/transfer-ownership/`, {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ userId }),
});
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 === 201;
} 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;
}
};
export const shareInvite = async (teamId: string, inviteId: string) => {
try {
const res = await fetch(`/api/v1/teams/${teamId}/invite/${inviteId}`, {
method: "GET",
headers: { "Content-Type": "application/json" },
});
if (res.status !== 200) {
const json = await res.json();
throw Error(json.message);
}
return res.json();
} catch (error) {
console.error(error);
throw Error(`shareInvite: unable to get invite link: ${error.message}`);
}
};