-
{t("common.full_name")}
-
{t("common.email")}
- {canDoRoleManagement &&
{t("common.role")}
}
-
{t("common.status")}
-
+
+
{t("common.full_name")}
+
{t("common.email")}
+
+ {canDoRoleManagement &&
{t("common.role")}
}
+
+
{t("common.status")}
+
+
{t("common.actions")}
{role && (
diff --git a/apps/web/modules/organization/settings/teams/components/edit-memberships/member-actions.tsx b/apps/web/modules/organization/settings/teams/components/edit-memberships/member-actions.tsx
index 4ff70c973b..b8e31a4aa4 100644
--- a/apps/web/modules/organization/settings/teams/components/edit-memberships/member-actions.tsx
+++ b/apps/web/modules/organization/settings/teams/components/edit-memberships/member-actions.tsx
@@ -110,47 +110,46 @@ export const MemberActions = ({ organization, member, invite, showDeleteButton }
return (
- {showDeleteButton && (
- <>
-
-
-
- >
- )}
+
+
+
- {invite && (
- <>
-
-
-
+
+
+
-
-
-
- >
- )}
+
+
+
+
{allMembers.map((member) => (
-
-
{member.name}
+
-
- {member.email}
+
-
- {canDoRoleManagement && allMembers?.length > 0 && (
+ {canDoRoleManagement && allMembers?.length > 0 && (
+
- )}
-
-
{getMembershipBadge(member)}
-
-
-
+
+ )}
+
{getMembershipBadge(member)}
+
+
))}
diff --git a/apps/web/modules/organization/settings/teams/components/invite-member/bulk-invite-tab.tsx b/apps/web/modules/organization/settings/teams/components/invite-member/bulk-invite-tab.tsx
index 91680395f6..1f28ca6284 100644
--- a/apps/web/modules/organization/settings/teams/components/invite-member/bulk-invite-tab.tsx
+++ b/apps/web/modules/organization/settings/teams/components/invite-member/bulk-invite-tab.tsx
@@ -39,19 +39,23 @@ export const BulkInviteTab = ({
}
Papa.parse(csvFile, {
skipEmptyLines: true,
- comments: "Full Name,Email Address,Role",
- complete: (results: ParseResult
) => {
+ header: true,
+ transformHeader: (header) => {
+ if (header === "Full Name") return "name";
+ if (header === "Email Address") return "email";
+ if (header === "Role") return "role";
+ return header;
+ },
+ complete: (results: ParseResult<{ name: string; email: string; role: string }>) => {
const members = results.data.map((csv) => {
- const [name, email, role] = csv;
-
- let orgRole = canDoRoleManagement ? role.trim().toLowerCase() : "owner";
+ let orgRole = canDoRoleManagement ? csv.role.trim().toLowerCase() : "owner";
if (!isFormbricksCloud) {
orgRole = orgRole === "billing" ? "owner" : orgRole;
}
return {
- name: name.trim(),
- email: email.trim(),
+ name: csv.name.trim(),
+ email: csv.email.trim(),
role: orgRole as TOrganizationRole,
teamIds: [],
};
@@ -60,7 +64,6 @@ export const BulkInviteTab = ({
ZInvitees.parse(members);
onSubmit(members);
} catch (err) {
- console.error(err.message);
toast.error(t("environments.settings.general.please_check_csv_file"));
}
setOpen(false);
diff --git a/apps/web/playwright/organization.spec.ts b/apps/web/playwright/organization.spec.ts
index e1ef5aaa44..5b839afd38 100644
--- a/apps/web/playwright/organization.spec.ts
+++ b/apps/web/playwright/organization.spec.ts
@@ -48,7 +48,7 @@ test.describe("Invite, accept and remove organization member", async () => {
await test.step("Copy invite Link", async () => {
await expect(page.locator("#membersInfoWrapper")).toBeVisible();
- const lastMemberInfo = page.locator("#membersInfoWrapper > .singleMemberInfo:last-child");
+ const lastMemberInfo = page.locator("#membersInfoWrapper > #singleMemberInfo:last-child");
await expect(lastMemberInfo).toBeVisible();
const pendingSpan = lastMemberInfo.locator("span").locator("span").filter({ hasText: "Pending" });
@@ -106,7 +106,7 @@ test.describe("Invite, accept and remove organization member", async () => {
// await expect(page.locator("#membersInfoWrapper")).toBeVisible();
- // const lastMemberInfo = page.locator("#membersInfoWrapper > .singleMemberInfo:last-child");
+ // const lastMemberInfo = page.locator("#membersInfoWrapper > #singleMemberInfo:last-child");
// await expect(lastMemberInfo).toBeVisible();
// const deleteMemberButton = lastMemberInfo.locator("#deleteMemberButton");