"use client"; import { useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Search } from "lucide-react"; // types import { IWorkspaceBulkInviteFormData } from "@plane/types"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // components import { PageHead } from "@/components/core"; import { SendWorkspaceInvitationModal, WorkspaceMembersList } from "@/components/workspace"; // constants import { MEMBER_INVITED } from "@/constants/event-tracker"; import { EUserWorkspaceRoles } from "@/constants/workspace"; // helpers import { getUserRole } from "@/helpers/user.helper"; // hooks import { useEventTracker, useMember, useUser, useWorkspace } from "@/hooks/store"; const WorkspaceMembersSettingsPage = observer(() => { // states const [inviteModal, setInviteModal] = useState(false); const [searchQuery, setSearchQuery] = useState(""); // router const { workspaceSlug } = useParams(); // store hooks const { captureEvent } = useEventTracker(); const { membership: { currentWorkspaceRole }, } = useUser(); const { workspace: { inviteMembersToWorkspace }, } = useMember(); const { currentWorkspace } = useWorkspace(); const handleWorkspaceInvite = (data: IWorkspaceBulkInviteFormData) => { if (!workspaceSlug) return; return inviteMembersToWorkspace(workspaceSlug.toString(), data) .then(() => { setInviteModal(false); captureEvent(MEMBER_INVITED, { emails: [ ...data.emails.map((email) => ({ email: email.email, role: getUserRole(email.role), })), ], project_id: undefined, state: "SUCCESS", element: "Workspace settings member page", }); setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", message: "Invitations sent successfully.", }); }) .catch((err) => { captureEvent(MEMBER_INVITED, { emails: [ ...data.emails.map((email) => ({ email: email.email, role: getUserRole(email.role), })), ], project_id: undefined, state: "FAILED", element: "Workspace settings member page", }); setToast({ type: TOAST_TYPE.ERROR, title: "Error!", message: `${err.error ?? "Something went wrong. Please try again."}`, }); }); }; // derived values const hasAddMemberPermission = currentWorkspaceRole && [EUserWorkspaceRoles.ADMIN, EUserWorkspaceRoles.MEMBER].includes(currentWorkspaceRole); const pageTitle = currentWorkspace?.name ? `${currentWorkspace.name} - Members` : undefined; return ( <> setInviteModal(false)} onSubmit={handleWorkspaceInvite} />

Members

setSearchQuery(e.target.value)} />
{hasAddMemberPermission && ( )}
); }); export default WorkspaceMembersSettingsPage;