import Modal, { ModalCloseButton } from '@/ui/modal'; import { 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 { useCallback, useEffect, useState } from 'react'; import { Button, IconButton } from '@/ui/button'; import Input from '@/ui/input'; import { InviteMembers } from '../invite-members/index'; import { Member, getDataCenter } from '@affine/datacenter'; import { Avatar } from '@mui/material'; import { Menu, MenuItem } from '@/ui/menu'; import { toast } from '@/ui/toast'; import { Empty } from '@/ui/empty'; import { useAppState } from '@/providers/app-state-provider'; import { GeneralPage } from './general'; import { getActiveWorkspace, setWorkspacePublish, Workspace, } from '@/hooks/mock-data/mock'; enum ActiveTab { 'general' = 'general', 'members' = 'members', 'publish' = 'publish', } type SettingTabProps = { activeTab: ActiveTab; onTabChange?: (tab: ActiveTab) => void; }; type WorkspaceSettingProps = { isShow: boolean; onClose?: () => void; }; 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, }: WorkspaceSettingProps) => { const { workspaces } = useAppState(); const [activeTab, setActiveTab] = useState(ActiveTab.general); const handleTabChange = (tab: ActiveTab) => { setActiveTab(tab); }; const workspace = getActiveWorkspace(); console.log('workspace: ', workspace); const handleClickClose = () => { onClose && onClose(); }; const isOwner = true; 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 = useCallback(() => { getDataCenter() .then(dc => dc.apis.getWorkspaceMembers({ id: workspace.id, }) ) .then(data => { setMembers(data); }) .catch(err => { console.log(err); }); }, [workspace.id]); useEffect(() => { refreshMembers(); }, [refreshMembers]); return (
Users({members.length}) Access level {members.length === 0 && ( )} {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 => { getDataCenter() .then(dc => dc.apis.removeMember({ permissionId: member.id, }) ) .then(() => { // 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 shareUrl = window.location.host + '/workspace/' + workspace.id + '?share=true'; const [publicStatus, setPublicStatus] = useState( workspace.isPublish ?? false ); const togglePublic = (flag: boolean) => { const isPublic = setWorkspacePublish(workspace.id, flag); setPublicStatus(isPublic); }; const copyUrl = () => { navigator.clipboard.writeText(shareUrl); toast('Copied url to clipboard'); }; return (
{publicStatus ? ( <> 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. )} {!publicStatus ? ( ) : ( )}
); };