import Modal, { ModalCloseButton } from '@/ui/modal'; import { StyledAvatarUploadBtn, StyledCopyButtonContainer, StyledMemberAvatar, StyledMemberButtonContainer, StyledMemberEmail, StyledMemberInfo, StyledMemberListContainer, StyledMemberListItem, StyledMemberName, StyledMemberNameContainer, StyledMemberRoleContainer, StyledMemberTitleContainer, StyledMoreVerticalButton, StyledPublishContent, StyledPublishCopyContainer, StyledPublishExplanation, StyledSettingContainer, StyledSettingContent, StyledSettingH2, StyledSettingSidebar, StyledSettingSidebarHeader, StyledSettingTabContainer, StyledSettingTagIconContainer, WorkspaceSettingTagItem, } from './style'; import { EditIcon, UsersIcon, PublishIcon, MoreVerticalIcon, EmailIcon, TrashIcon, } from '@blocksuite/icons'; import { useEffect, useState } from 'react'; import { Button, IconButton } from '@/ui/button'; import Input from '@/ui/input'; import { InviteMembers } from '../invite-members/index'; import { getWorkspaceMembers, Workspace, Member, removeMember, updateWorkspace, } from '@pathfinder/data-services'; import { Avatar } from '@mui/material'; import { Menu, MenuItem } from '@/ui/menu'; import { toast } from '@/ui/toast'; import { useAppState } from '@/providers/app-state-provider'; import { WorkspaceDetails } from '../workspace-slider-bar/WorkspaceSelector/SelectorPopperContent'; import { GeneralPage } from './general'; import { Workspace as StoreWorkspaces } from '@blocksuite/store'; enum ActiveTab { 'general' = 'general', 'members' = 'members', 'publish' = 'publish', } type SettingTabProps = { activeTab: ActiveTab; onTabChange?: (tab: ActiveTab) => void; }; type WorkspaceSettingProps = { isShow: boolean; onClose?: () => void; workspace: Workspace; owner: WorkspaceDetails[string]['owner']; workspaces: Record; }; const WorkspaceSettingTab = ({ activeTab, onTabChange }: SettingTabProps) => { return ( { onTabChange && onTabChange(ActiveTab.general); }} > General { onTabChange && onTabChange(ActiveTab.members); }} > Members { onTabChange && onTabChange(ActiveTab.publish); }} > Publish ); }; export const WorkspaceSetting = ({ isShow, onClose, workspace, owner, workspaces, }: WorkspaceSettingProps) => { const { user } = useAppState(); const [activeTab, setActiveTab] = useState(ActiveTab.general); const handleTabChange = (tab: ActiveTab) => { setActiveTab(tab); }; const handleClickClose = () => { onClose && onClose(); }; const isOwner = user && owner.id === user.id; useEffect(() => { // reset tab when modal is closed if (!isShow) { setActiveTab(ActiveTab.general); } }, [isShow]); return ( {isOwner ? ( Workspace Settings ) : null} {activeTab === ActiveTab.general && ( )} {activeTab === ActiveTab.members && workspace && ( )} {activeTab === ActiveTab.publish && ( )} ); }; const MembersPage = ({ workspace }: { workspace: Workspace }) => { const [isInviteModalShow, setIsInviteModalShow] = useState(false); const [members, setMembers] = useState([]); const refreshMembers = () => { getWorkspaceMembers({ id: workspace.id, }) .then(data => { setMembers(data); }) .catch(err => { console.log(err); }); }; useEffect(() => { refreshMembers(); }, [workspace.id]); return (
Users({members.length}) Access level {members.length ? ( members.map(member => { return ( {member.user.type === 'Registered' ? ( ) : ( )} {member.user.type === 'Registered' ? ( {member.user.name} ) : ( <> )} {member.user.email} {member.accepted ? member.type !== 99 ? 'Member' : 'Workspace Owner' : 'Pending'} { // confirm({ // title: 'Delete Member?', // content: `will delete member`, // confirmText: 'Delete', // confirmType: 'danger', // }).then(confirm => { removeMember({ permissionId: member.id, }).then(data => { // console.log('data: ', data); toast('Moved to Trash'); refreshMembers(); }); // }); }} icon={} > Delete } placement="bottom-end" disablePortal={true} > ); }) ) : ( <> )} { setIsInviteModalShow(false); }} onInviteSuccess={() => { refreshMembers(); }} workspaceId={workspace.id} open={isInviteModalShow} >
); }; const PublishPage = ({ workspace }: { workspace: Workspace }) => { const { refreshWorkspacesMeta } = useAppState(); const shareUrl = window.location.host + '/workspace/' + workspace.id; const togglePublic = (flag: boolean) => { updateWorkspace({ id: workspace.id, public: flag, }).then(data => { refreshWorkspacesMeta(); toast('Updated'); }); }; const copyUrl = () => { navigator.clipboard.writeText(shareUrl); toast('Copied'); }; return (
{workspace.public ? ( <> The current workspace has been published to the web, everyone can view the contents of this workspace through the link. Share with link ) : ( After publishing to the web, everyone can view the content of this workspace through the link. )} {!workspace.public ? ( ) : ( )}
); };