diff --git a/app/components/UserDialogs.tsx b/app/components/UserDialogs.tsx index afc283ade..7aeb3c1e5 100644 --- a/app/components/UserDialogs.tsx +++ b/app/components/UserDialogs.tsx @@ -1,5 +1,6 @@ import * as React from "react"; import { useTranslation } from "react-i18next"; +import { UserRole } from "@shared/types"; import User from "~/models/User"; import ConfirmationDialog from "~/components/ConfirmationDialog"; import Input from "~/components/Input"; @@ -15,7 +16,7 @@ export function UserChangeToViewerDialog({ user, onSubmit }: Props) { const { users } = useStores(); const handleSubmit = async () => { - await users.demote(user, "viewer"); + await users.demote(user, UserRole.Viewer); onSubmit(); }; @@ -41,7 +42,7 @@ export function UserChangeToMemberDialog({ user, onSubmit }: Props) { const { users } = useStores(); const handleSubmit = async () => { - await users.demote(user, "member"); + await users.demote(user, UserRole.Member); onSubmit(); }; diff --git a/app/models/User.ts b/app/models/User.ts index 1cbc06711..8b7a38181 100644 --- a/app/models/User.ts +++ b/app/models/User.ts @@ -7,8 +7,9 @@ import { NotificationEventType, UserPreference, UserPreferences, + UserRole, } from "@shared/types"; -import type { Role, NotificationSettings } from "@shared/types"; +import type { NotificationSettings } from "@shared/types"; import { client } from "~/utils/ApiClient"; import ParanoidModel from "./ParanoidModel"; import Field from "./decorators/Field"; @@ -74,13 +75,13 @@ class User extends ParanoidModel { } @computed - get role(): Role { + get role(): UserRole { if (this.isAdmin) { - return "admin"; + return UserRole.Admin; } else if (this.isViewer) { - return "viewer"; + return UserRole.Viewer; } else { - return "member"; + return UserRole.Member; } } diff --git a/app/scenes/Invite.tsx b/app/scenes/Invite.tsx index 317f79675..e56efa37a 100644 --- a/app/scenes/Invite.tsx +++ b/app/scenes/Invite.tsx @@ -5,7 +5,7 @@ import { useTranslation, Trans } from "react-i18next"; import { Link } from "react-router-dom"; import styled from "styled-components"; import { s } from "@shared/styles"; -import { Role } from "@shared/types"; +import { UserRole } from "@shared/types"; import { UserValidation } from "@shared/validations"; import Button from "~/components/Button"; import CopyToClipboard from "~/components/CopyToClipboard"; @@ -28,7 +28,7 @@ type Props = { type InviteRequest = { email: string; name: string; - role: Role; + role: UserRole; }; function Invite({ onSubmit }: Props) { @@ -38,17 +38,17 @@ function Invite({ onSubmit }: Props) { { email: "", name: "", - role: "member", + role: UserRole.Member, }, { email: "", name: "", - role: "member", + role: UserRole.Member, }, { email: "", name: "", - role: "member", + role: UserRole.Member, }, ]); const { users } = useStores(); @@ -65,7 +65,7 @@ function Invite({ onSubmit }: Props) { setIsSaving(true); try { - const data = await users.invite(invites); + const data = await users.invite(invites.filter((i) => i.email)); onSubmit(); if (data.sent.length > 0) { @@ -113,7 +113,7 @@ function Invite({ onSubmit }: Props) { newInvites.push({ email: "", name: "", - role: "member", + role: UserRole.Member, }); return newInvites; }); @@ -138,13 +138,16 @@ function Invite({ onSubmit }: Props) { }); }, [showToast, t]); - const handleRoleChange = React.useCallback((role: Role, index: number) => { - setInvites((prevInvites) => { - const newInvites = [...prevInvites]; - newInvites[index]["role"] = role; - return newInvites; - }); - }, []); + const handleRoleChange = React.useCallback( + (role: UserRole, index: number) => { + setInvites((prevInvites) => { + const newInvites = [...prevInvites]; + newInvites[index]["role"] = role; + return newInvites; + }); + }, + [] + ); return (