feat: workspace setting
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { Workspace } from '@/hooks/mock-data/mock';
|
|
||||||
import { styled } from '@/styles';
|
import { styled } from '@/styles';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
|
|
||||||
export const ExportPageTitleContainer = styled('div')(() => {
|
export const ExportPageTitleContainer = styled('div')(() => {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -17,12 +17,13 @@ import { Button, IconButton } from '@/ui/button';
|
|||||||
import { InviteMembers } from '../invite-members/index';
|
import { InviteMembers } from '../invite-members/index';
|
||||||
import { Menu, MenuItem } from '@/ui/menu';
|
import { Menu, MenuItem } from '@/ui/menu';
|
||||||
import { Empty } from '@/ui/empty';
|
import { Empty } from '@/ui/empty';
|
||||||
import {
|
// import {
|
||||||
deleteMember,
|
// deleteMember,
|
||||||
getMembers,
|
// getMembers,
|
||||||
User,
|
// User,
|
||||||
Workspace,
|
// Workspace,
|
||||||
} from '@/hooks/mock-data/mock';
|
// } from '@/hooks/mock-data/mock';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
||||||
import { StyledMemberWarp } from './general/style';
|
import { StyledMemberWarp } from './general/style';
|
||||||
import { useConfirm } from '@/providers/ConfirmProvider';
|
import { useConfirm } from '@/providers/ConfirmProvider';
|
||||||
@@ -30,7 +31,9 @@ import { useConfirm } from '@/providers/ConfirmProvider';
|
|||||||
// import { useAppState } from '@/providers/app-state-provider';
|
// import { useAppState } from '@/providers/app-state-provider';
|
||||||
export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
||||||
const [isInviteModalShow, setIsInviteModalShow] = useState(false);
|
const [isInviteModalShow, setIsInviteModalShow] = useState(false);
|
||||||
const [members, setMembers] = useState<User[]>([]);
|
const [members, setMembers] = useState<[{ name: string; email: string }]>([
|
||||||
|
{ name: 'affine', email: 'tttt' },
|
||||||
|
]);
|
||||||
const { user, login, updateWorkspaceMeta } = useTemporaryHelper();
|
const { user, login, updateWorkspaceMeta } = useTemporaryHelper();
|
||||||
const { confirm } = useConfirm();
|
const { confirm } = useConfirm();
|
||||||
// const refreshMembers = useCallback(() => {
|
// const refreshMembers = useCallback(() => {
|
||||||
@@ -48,8 +51,8 @@ export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
// });
|
// });
|
||||||
// }, [workspace.id]);
|
// }, [workspace.id]);
|
||||||
const setMembersList = () => {
|
const setMembersList = () => {
|
||||||
const members = getMembers(workspace.id);
|
// const members = getMembers(workspace.id);
|
||||||
members && setMembers(members);
|
// members && setMembers(members);
|
||||||
};
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setMembersList();
|
setMembersList();
|
||||||
@@ -58,7 +61,7 @@ export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{workspace.type === 'cloud' ? (
|
{workspace.provider === 'cloud' ? (
|
||||||
<>
|
<>
|
||||||
<StyledMemberTitleContainer>
|
<StyledMemberTitleContainer>
|
||||||
<StyledMemberNameContainer>
|
<StyledMemberNameContainer>
|
||||||
@@ -67,13 +70,6 @@ export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
<StyledMemberRoleContainer>Access level</StyledMemberRoleContainer>
|
<StyledMemberRoleContainer>Access level</StyledMemberRoleContainer>
|
||||||
</StyledMemberTitleContainer>
|
</StyledMemberTitleContainer>
|
||||||
<StyledMemberListContainer>
|
<StyledMemberListContainer>
|
||||||
{members.length === 0 && (
|
|
||||||
<Empty
|
|
||||||
width={648}
|
|
||||||
sx={{ marginTop: '60px' }}
|
|
||||||
height={300}
|
|
||||||
></Empty>
|
|
||||||
)}
|
|
||||||
{members.length ? (
|
{members.length ? (
|
||||||
members.map((member, index) => {
|
members.map((member, index) => {
|
||||||
return (
|
return (
|
||||||
@@ -103,7 +99,7 @@ export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
<>
|
<>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteMember(workspace.id, 0);
|
// deleteMember(workspace.id, 0);
|
||||||
setMembersList();
|
setMembersList();
|
||||||
// confirm({
|
// confirm({
|
||||||
// title: 'Delete Member?',
|
// title: 'Delete Member?',
|
||||||
@@ -142,7 +138,11 @@ export const MembersPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
) : (
|
) : (
|
||||||
<></>
|
<Empty
|
||||||
|
width={648}
|
||||||
|
sx={{ marginTop: '60px' }}
|
||||||
|
height={300}
|
||||||
|
></Empty>
|
||||||
)}
|
)}
|
||||||
</StyledMemberListContainer>
|
</StyledMemberListContainer>
|
||||||
<StyledMemberButtonContainer>
|
<StyledMemberButtonContainer>
|
||||||
|
|||||||
@@ -9,20 +9,20 @@ import {
|
|||||||
import { Button } from '@/ui/button';
|
import { Button } from '@/ui/button';
|
||||||
import Input from '@/ui/input';
|
import Input from '@/ui/input';
|
||||||
import { toast } from '@/ui/toast';
|
import { toast } from '@/ui/toast';
|
||||||
import { Workspace } from '@/hooks/mock-data/mock';
|
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
|
||||||
import { useConfirm } from '@/providers/ConfirmProvider';
|
import { useConfirm } from '@/providers/ConfirmProvider';
|
||||||
|
// import { useAppState } from '@/providers/app-state-provider3';
|
||||||
|
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
|
|
||||||
export const PublishPage = ({ workspace }: { workspace: Workspace }) => {
|
export const PublishPage = ({ workspace }: { workspace: Workspace }) => {
|
||||||
console.log('workspace: ', workspace);
|
|
||||||
const shareUrl =
|
const shareUrl =
|
||||||
window.location.host + '/workspace/' + workspace.id + '?share=true';
|
window.location.host + '/workspace/' + workspace.id + '?share=true';
|
||||||
|
const { publishWorkspace } = useWorkspaceHelper();
|
||||||
|
|
||||||
const { login, updateWorkspaceMeta, user } = useTemporaryHelper();
|
|
||||||
const { confirm } = useConfirm();
|
const { confirm } = useConfirm();
|
||||||
|
|
||||||
const togglePublic = (flag: boolean) => {
|
const togglePublic = (flag: boolean) => {
|
||||||
updateWorkspaceMeta(workspace.id, { isPublish: flag });
|
workspace.id && publishWorkspace(workspace?.id, flag);
|
||||||
};
|
};
|
||||||
|
|
||||||
const copyUrl = () => {
|
const copyUrl = () => {
|
||||||
@@ -34,22 +34,23 @@ export const PublishPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
confirm({
|
confirm({
|
||||||
title: 'Enable AFFiNE Cloud?',
|
title: 'Enable AFFiNE Cloud?',
|
||||||
content: `If enabled, the data in this workspace will be backed up and synchronized via AFFiNE Cloud.`,
|
content: `If enabled, the data in this workspace will be backed up and synchronized via AFFiNE Cloud.`,
|
||||||
confirmText: user ? 'Enable' : 'Sign in and Enable',
|
confirmText:
|
||||||
|
workspace.provider === 'local' ? 'Enable' : 'Sign in and Enable',
|
||||||
cancelText: 'Skip',
|
cancelText: 'Skip',
|
||||||
}).then(confirm => {
|
}).then(confirm => {
|
||||||
if (confirm) {
|
if (confirm) {
|
||||||
if (user) {
|
// if (user) {
|
||||||
updateWorkspaceMeta(workspace.id, { type: 'cloud' });
|
// updateWorkspaceMeta(workspace.id, { type: 'cloud' });
|
||||||
} else {
|
// } else {
|
||||||
login();
|
// login();
|
||||||
updateWorkspaceMeta(workspace.id, { type: 'cloud' });
|
// updateWorkspaceMeta(workspace.id, { type: 'cloud' });
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{workspace.type === 'cloud' ? (
|
{workspace.provider === 'cloud' ? (
|
||||||
<div>
|
<div>
|
||||||
<StyledPublishContent>
|
<StyledPublishContent>
|
||||||
{workspace?.isPublish ? (
|
{workspace?.isPublish ? (
|
||||||
|
|||||||
@@ -6,9 +6,8 @@ import {
|
|||||||
import { DownloadIcon } from '@blocksuite/icons';
|
import { DownloadIcon } from '@blocksuite/icons';
|
||||||
import { Button } from '@/ui/button';
|
import { Button } from '@/ui/button';
|
||||||
import { Menu, MenuItem } from '@/ui/menu';
|
import { Menu, MenuItem } from '@/ui/menu';
|
||||||
import { deleteMember, Workspace } from '@/hooks/mock-data/mock';
|
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
export const SyncPage = ({ workspace }: { workspace: Workspace }) => {
|
export const SyncPage = ({ workspace }: { workspace: Workspace }) => {
|
||||||
const { currentWorkspace, updateWorkspaceMeta } = useTemporaryHelper();
|
const { currentWorkspace, updateWorkspaceMeta } = useTemporaryHelper();
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ export const SyncPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
<>
|
<>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteMember(workspace.id, 0);
|
// deleteMember(workspace.id, 0);
|
||||||
}}
|
}}
|
||||||
icon={<DownloadIcon />}
|
icon={<DownloadIcon />}
|
||||||
>
|
>
|
||||||
@@ -57,7 +56,7 @@ export const SyncPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
deleteMember(workspace.id, 0);
|
// deleteMember(workspace.id, 0);
|
||||||
}}
|
}}
|
||||||
icon={<DownloadIcon />}
|
icon={<DownloadIcon />}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import { MembersPage } from './MembersPage';
|
|||||||
import { PublishPage } from './PublishPage';
|
import { PublishPage } from './PublishPage';
|
||||||
import { ExportPage } from './ExportPage';
|
import { ExportPage } from './ExportPage';
|
||||||
import { SyncPage } from './SyncPage';
|
import { SyncPage } from './SyncPage';
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
import { useAppState } from '@/providers/app-state-provider';
|
||||||
|
|
||||||
enum ActiveTab {
|
enum ActiveTab {
|
||||||
'general' = 'general',
|
'general' = 'general',
|
||||||
@@ -115,7 +115,7 @@ export const WorkspaceSetting = ({
|
|||||||
setActiveTab(tab);
|
setActiveTab(tab);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { currentWorkspace } = useTemporaryHelper();
|
const { currentMetaWorkSpace } = useAppState();
|
||||||
const handleClickClose = () => {
|
const handleClickClose = () => {
|
||||||
onClose && onClose();
|
onClose && onClose();
|
||||||
};
|
};
|
||||||
@@ -142,20 +142,20 @@ export const WorkspaceSetting = ({
|
|||||||
</StyledSettingSidebar>
|
</StyledSettingSidebar>
|
||||||
) : null}
|
) : null}
|
||||||
<StyledSettingContent>
|
<StyledSettingContent>
|
||||||
{activeTab === ActiveTab.general && currentWorkspace && (
|
{activeTab === ActiveTab.general && currentMetaWorkSpace && (
|
||||||
<GeneralPage workspace={currentWorkspace} />
|
<GeneralPage workspace={currentMetaWorkSpace} />
|
||||||
)}
|
)}
|
||||||
{activeTab === ActiveTab.sync && currentWorkspace && (
|
{activeTab === ActiveTab.sync && currentMetaWorkSpace && (
|
||||||
<SyncPage workspace={currentWorkspace} />
|
<SyncPage workspace={currentMetaWorkSpace} />
|
||||||
)}
|
)}
|
||||||
{activeTab === ActiveTab.members && currentWorkspace && (
|
{activeTab === ActiveTab.members && currentMetaWorkSpace && (
|
||||||
<MembersPage workspace={currentWorkspace} />
|
<MembersPage workspace={currentMetaWorkSpace} />
|
||||||
)}
|
)}
|
||||||
{activeTab === ActiveTab.publish && currentWorkspace && (
|
{activeTab === ActiveTab.publish && currentMetaWorkSpace && (
|
||||||
<PublishPage workspace={currentWorkspace} />
|
<PublishPage workspace={currentMetaWorkSpace} />
|
||||||
)}
|
)}
|
||||||
{activeTab === ActiveTab.export && currentWorkspace && (
|
{activeTab === ActiveTab.export && currentMetaWorkSpace && (
|
||||||
<ExportPage workspace={currentWorkspace} />
|
<ExportPage workspace={currentMetaWorkSpace} />
|
||||||
)}
|
)}
|
||||||
</StyledSettingContent>
|
</StyledSettingContent>
|
||||||
</StyledSettingContainer>
|
</StyledSettingContainer>
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import { WorkspaceDelete } from './delete';
|
|||||||
// import { debounce } from '@/utils';
|
// import { debounce } from '@/utils';
|
||||||
import { WorkspaceLeave } from './leave';
|
import { WorkspaceLeave } from './leave';
|
||||||
import { Upload } from '@/components/file-upload';
|
import { Upload } from '@/components/file-upload';
|
||||||
import { Workspace } from '@/hooks/mock-data/mock';
|
|
||||||
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
export const GeneralPage = ({ workspace }: { workspace: Workspace }) => {
|
export const GeneralPage = ({ workspace }: { workspace: Workspace }) => {
|
||||||
// const { refreshWorkspacesMeta } = useAppState();
|
// const { refreshWorkspacesMeta } = useAppState();
|
||||||
const { updateWorkspaceMeta } = useTemporaryHelper();
|
const { updateWorkspaceMeta } = useTemporaryHelper();
|
||||||
@@ -124,7 +124,7 @@ export const GeneralPage = ({ workspace }: { workspace: Workspace }) => {
|
|||||||
|
|
||||||
<StyledSettingH2 marginTop={20}>Workspace Type</StyledSettingH2>
|
<StyledSettingH2 marginTop={20}>Workspace Type</StyledSettingH2>
|
||||||
<StyledSettingInputContainer>
|
<StyledSettingInputContainer>
|
||||||
<code>{workspace.type} </code>
|
<code>{workspace.provider} </code>
|
||||||
</StyledSettingInputContainer>
|
</StyledSettingInputContainer>
|
||||||
<StyledDeleteButtonContainer>
|
<StyledDeleteButtonContainer>
|
||||||
{isOwner ? (
|
{isOwner ? (
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ import { useRouter } from 'next/router';
|
|||||||
import {
|
import {
|
||||||
deleteWorkspace,
|
deleteWorkspace,
|
||||||
getWorkspaces,
|
getWorkspaces,
|
||||||
Workspace,
|
// Workspace,
|
||||||
} from '@/hooks/mock-data/mock';
|
} from '@/hooks/mock-data/mock';
|
||||||
|
import { Workspace } from '@affine/datacenter';
|
||||||
|
|
||||||
interface WorkspaceDeleteProps {
|
interface WorkspaceDeleteProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@@ -55,7 +56,7 @@ export const WorkspaceDelete = ({
|
|||||||
<StyledModalWrapper>
|
<StyledModalWrapper>
|
||||||
<ModalCloseButton onClick={onClose} />
|
<ModalCloseButton onClick={onClose} />
|
||||||
<StyledModalHeader>Delete Workspace</StyledModalHeader>
|
<StyledModalHeader>Delete Workspace</StyledModalHeader>
|
||||||
{workspace.type === 'local' ? (
|
{workspace.provider === 'local' ? (
|
||||||
<StyledTextContent>
|
<StyledTextContent>
|
||||||
Deleting (
|
Deleting (
|
||||||
<StyledWorkspaceName>{workspace.name}</StyledWorkspaceName>) cannot
|
<StyledWorkspaceName>{workspace.name}</StyledWorkspaceName>) cannot
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
|||||||
import { useAppState } from '@/providers/app-state-provider';
|
import { useAppState } from '@/providers/app-state-provider';
|
||||||
export const WorkspaceSelector = () => {
|
export const WorkspaceSelector = () => {
|
||||||
const [workspaceListShow, setWorkspaceListShow] = useState(false);
|
const [workspaceListShow, setWorkspaceListShow] = useState(false);
|
||||||
const { currentWorkspace, workspaceList } = useAppState();
|
const { currentMetaWorkSpace, workspaceList } = useAppState();
|
||||||
|
console.log('currentMetaWorkSpace: ', currentMetaWorkSpace);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (workspaceList.length === 0) {
|
if (workspaceList.length === 0) {
|
||||||
@@ -24,7 +25,7 @@ export const WorkspaceSelector = () => {
|
|||||||
<Avatar
|
<Avatar
|
||||||
alt="Affine"
|
alt="Affine"
|
||||||
data-testid="workspace-avatar"
|
data-testid="workspace-avatar"
|
||||||
src={currentWorkspace.meta.avatar}
|
src={currentMetaWorkSpace?.avatar}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
@@ -33,12 +34,12 @@ export const WorkspaceSelector = () => {
|
|||||||
>
|
>
|
||||||
<WorkspaceAvatar
|
<WorkspaceAvatar
|
||||||
size={28}
|
size={28}
|
||||||
name={currentWorkspace.meta.name ?? 'AFFiNE'}
|
name={currentMetaWorkSpace?.name ?? 'AFFiNE'}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Avatar>
|
</Avatar>
|
||||||
<WorkspaceName data-testid="workspace-name">
|
<WorkspaceName data-testid="workspace-name">
|
||||||
{currentWorkspace?.meta.name ?? 'AFFiNE'}
|
{currentMetaWorkSpace?.name ?? 'AFFiNE'}
|
||||||
</WorkspaceName>
|
</WorkspaceName>
|
||||||
</SelectorWrapper>
|
</SelectorWrapper>
|
||||||
<WorkspaceModal
|
<WorkspaceModal
|
||||||
|
|||||||
@@ -13,7 +13,15 @@ export const useWorkspaceHelper = () => {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// const updateWorkspace = async (workspace: Workspace) => {};
|
||||||
|
|
||||||
|
const publishWorkspace = async (workspaceId: string, publish: boolean) => {
|
||||||
|
dataCenter.setWorkspacePublish(workspaceId, publish);
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
createWorkspace,
|
createWorkspace,
|
||||||
|
publishWorkspace,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -49,6 +49,9 @@ export const AppStateProvider = ({
|
|||||||
dataCenter.workspaces[0].id
|
dataCenter.workspaces[0].id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
const currentMetaWorkSpace = dataCenter.workspaces.find(item => {
|
||||||
|
return item.id === currentWorkspace.room;
|
||||||
|
});
|
||||||
|
|
||||||
setAppState({
|
setAppState({
|
||||||
dataCenter,
|
dataCenter,
|
||||||
@@ -60,6 +63,7 @@ export const AppStateProvider = ({
|
|||||||
currentPage: null,
|
currentPage: null,
|
||||||
editor: null,
|
editor: null,
|
||||||
synced: true,
|
synced: true,
|
||||||
|
currentMetaWorkSpace: currentMetaWorkSpace ?? null,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -106,7 +110,6 @@ export const AppStateProvider = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const loadWorkspace = async (workspaceId: string) => {
|
const loadWorkspace = async (workspaceId: string) => {
|
||||||
console.log('workspaceId: ', workspaceId);
|
|
||||||
const { dataCenter, workspaceList, currentWorkspaceId } = appState;
|
const { dataCenter, workspaceList, currentWorkspaceId } = appState;
|
||||||
if (!workspaceList.find(v => v.id === workspaceId)) {
|
if (!workspaceList.find(v => v.id === workspaceId)) {
|
||||||
return;
|
return;
|
||||||
@@ -115,12 +118,14 @@ export const AppStateProvider = ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const workspace = await dataCenter.loadWorkspace(workspaceId);
|
const workspace = await dataCenter.loadWorkspace(workspaceId);
|
||||||
console.log('workspace: ', workspace);
|
const currentMetaWorkSpace = dataCenter.workspaces.find(item => {
|
||||||
|
return item.id === workspace.room;
|
||||||
|
});
|
||||||
setAppState({
|
setAppState({
|
||||||
...appState,
|
...appState,
|
||||||
currentWorkspace: await dataCenter.loadWorkspace(workspaceId),
|
currentWorkspace: workspace,
|
||||||
currentWorkspaceId: workspaceId,
|
currentWorkspaceId: workspaceId,
|
||||||
|
currentMetaWorkSpace: currentMetaWorkSpace ?? null,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export type AppStateValue = {
|
|||||||
user: User | undefined;
|
user: User | undefined;
|
||||||
workspaceList: Workspace[];
|
workspaceList: Workspace[];
|
||||||
currentWorkspace: StoreWorkspace;
|
currentWorkspace: StoreWorkspace;
|
||||||
|
currentMetaWorkSpace: Workspace | null;
|
||||||
currentWorkspaceId: string;
|
currentWorkspaceId: string;
|
||||||
pageList: PageMeta[];
|
pageList: PageMeta[];
|
||||||
currentPage: StorePage | null;
|
currentPage: StorePage | null;
|
||||||
|
|||||||
Reference in New Issue
Block a user