Skip to content

Commit

Permalink
MembersList is now only for projects
Browse files Browse the repository at this point in the history
Removed org roles, org-role select dropdowns, and so on from the
MembersList component, which is now only for projects again.
  • Loading branch information
rmunn committed May 30, 2024
1 parent 729ef18 commit b7a89db
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 72 deletions.
12 changes: 5 additions & 7 deletions frontend/src/lib/components/MembersList.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
export type Member = {
id: string
user?: { id: string; name: string; email?: string | null } | null
role: ProjectRole | OrgRole
role: ProjectRole
};
</script>

Expand All @@ -13,7 +13,7 @@
import AdminContent from '$lib/layout/AdminContent.svelte';
import { Icon, TrashIcon } from '$lib/icons';
import { Button } from '$lib/forms';
import type { OrgRole, ProjectRole } from '$lib/gql/types';
import type { ProjectRole } from '$lib/gql/types';
import { createEventDispatcher } from 'svelte';
import ChangeMemberRoleModal from '../../routes/(authenticated)/project/[project_code]/ChangeMemberRoleModal.svelte';
import { DialogResponse } from './modals';
Expand All @@ -24,9 +24,7 @@
export let members: Member[] = [];
export let canManageMember: (member: Member) => boolean;
export let canManageList: boolean;
type RoleType = 'project' | 'org'
export let roleType: RoleType;
export let projectOrOrgId: string;
export let projectId: string;
let dispatch = createEventDispatcher();
Expand Down Expand Up @@ -60,7 +58,7 @@
});
if (response === DialogResponse.Submit) {
const notification = `${roleType}_page.notifications.role_change` as const;
const notification = `project_page.notifications.role_change` as const;
const role = formState.role.currentValue;
notifySuccess(
$t(notification, {
Expand Down Expand Up @@ -130,5 +128,5 @@
<slot />

</BadgeList>
<ChangeMemberRoleModal {roleType} {projectOrOrgId} bind:this={changeMemberRoleModal} />
<ChangeMemberRoleModal {projectId} bind:this={changeMemberRoleModal} />
</div>
31 changes: 0 additions & 31 deletions frontend/src/lib/forms/MemberRoleSelect.svelte

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@

<MembersList
roleType="project"
projectOrOrgId={project.id}
projectId={project.id}
{members}
canManageMember={(member) => canManage && (member.user?.id !== userId || user.isAdmin)}
canManageList={canManage}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,60 +1,44 @@
<script lang="ts">
import { FormModal, type FormModalResult } from '$lib/components/modals';
import { tryParse } from '$lib/forms';
import { OrgRole, ProjectRole } from '$lib/gql/types';
import { ProjectRoleSelect, tryParse } from '$lib/forms';
import { ProjectRole } from '$lib/gql/types';
import t from '$lib/i18n';
import { z } from 'zod';
import { _changeProjectMemberRole } from './+page';
import { _changeOrgMemberRole } from '../../org/[org_id]/+page';
import type { UUID } from 'crypto';
import MemberRoleSelect from '$lib/forms/MemberRoleSelect.svelte';
export let roleType: 'project' | 'org' = 'project';
export let projectOrOrgId: string;
export let projectId: string;
$: schema = z.object({
role: roleType === 'project'
? z.enum([ProjectRole.Editor, ProjectRole.Manager])
: z.enum([OrgRole.User, OrgRole.Admin]),
role: z.enum([ProjectRole.Editor, ProjectRole.Manager])
});
type Schema = typeof schema;
let formModal: FormModal<Schema>;
$: form = formModal?.form();
let name: string;
export async function open(member: { userId: UUID; name: string; role: ProjectRole | OrgRole }): Promise<FormModalResult<Schema>> {
export async function open(member: { userId: UUID; name: string; role: ProjectRole }): Promise<FormModalResult<Schema>> {
name = member.name;
return await formModal.open(tryParse(schema, member), async () => {
if (roleType === 'project') {
const result = await _changeProjectMemberRole({
projectId: projectOrOrgId,
userId: member.userId,
role: $form.role as ProjectRole,
});
if (result.error?.byType('ProjectMembersMustBeVerified')) {
return { role: [$t('project_page.add_user.user_must_be_verified')] };
}
if (result.error?.byType('ProjectMembersMustBeVerifiedForRole')) {
return { role: [$t('project_page.add_user.manager_must_be_verified')] };
}
return result.error?.message;
} else if (roleType === 'org') {
const result = await _changeOrgMemberRole(
projectOrOrgId as UUID,
member.userId,
$form.role as OrgRole
);
return result.error?.message;
const result = await _changeProjectMemberRole({
projectId: projectId,
userId: member.userId,
role: $form.role as ProjectRole,
});
if (result.error?.byType('ProjectMembersMustBeVerified')) {
return { role: [$t('project_page.add_user.user_must_be_verified')] };
}
throw new Error(`Invalid role type: ${roleType as string}.`);
if (result.error?.byType('ProjectMembersMustBeVerifiedForRole')) {
return { role: [$t('project_page.add_user.manager_must_be_verified')] };
}
return result.error?.message;
});
}
</script>

<FormModal bind:this={formModal} {schema} let:errors>
<span slot="title">{$t('project_page.change_role_modal.title', { name })}</span>
<MemberRoleSelect type={roleType} bind:value={$form.role} error={errors.role} />
<ProjectRoleSelect bind:value={$form.role} error={errors.role} />
<span slot="submitText">{$t('project_page.change_role')}</span>
</FormModal>

0 comments on commit b7a89db

Please sign in to comment.