feat: switch workspace
This commit is contained in:
@@ -13,19 +13,19 @@ import {
|
|||||||
import { useConfirm } from '@/providers/ConfirmProvider';
|
import { useConfirm } from '@/providers/ConfirmProvider';
|
||||||
import { toast } from '@/ui/toast';
|
import { toast } from '@/ui/toast';
|
||||||
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
||||||
// import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
|
||||||
import { useAppState } from '@/providers/app-state-provider';
|
import { useAppState } from '@/providers/app-state-provider';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
|
||||||
interface LoginModalProps {
|
interface WorkspaceModalProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WorkspaceModal = ({ open, onClose }: LoginModalProps) => {
|
export const WorkspaceModal = ({ open, onClose }: WorkspaceModalProps) => {
|
||||||
const [createWorkspaceOpen, setCreateWorkspaceOpen] = useState(false);
|
const [createWorkspaceOpen, setCreateWorkspaceOpen] = useState(false);
|
||||||
const { confirm } = useConfirm();
|
const { confirm } = useConfirm();
|
||||||
const { user, workspaceList, loadWorkspace } = useAppState();
|
const { user, workspaceList } = useAppState();
|
||||||
|
const router = useRouter();
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Modal open={open} onClose={onClose}>
|
<Modal open={open} onClose={onClose}>
|
||||||
@@ -50,9 +50,7 @@ export const WorkspaceModal = ({ open, onClose }: LoginModalProps) => {
|
|||||||
return (
|
return (
|
||||||
<WorkspaceItem
|
<WorkspaceItem
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
// setActiveWorkspace(item);
|
router.replace(`/workspace/${item.id}`);
|
||||||
console.log(item);
|
|
||||||
loadWorkspace(item.id);
|
|
||||||
onClose();
|
onClose();
|
||||||
}}
|
}}
|
||||||
key={index}
|
key={index}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { Avatar, WorkspaceName, SelectorWrapper } from './styles';
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { WorkspaceModal } from '@/components/workspace-modal';
|
import { WorkspaceModal } from '@/components/workspace-modal';
|
||||||
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
import { WorkspaceAvatar } from '@/components/workspace-avatar';
|
||||||
import { useTemporaryHelper } from '@/providers/temporary-helper-provider';
|
|
||||||
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);
|
||||||
|
|||||||
@@ -43,10 +43,12 @@ export const AppStateProvider = ({
|
|||||||
if (dataCenter.workspaces.length === 0) {
|
if (dataCenter.workspaces.length === 0) {
|
||||||
await createDefaultWorkspace(dataCenter);
|
await createDefaultWorkspace(dataCenter);
|
||||||
}
|
}
|
||||||
|
let currentWorkspace = appState.currentWorkspace;
|
||||||
const currentWorkspace = await dataCenter.loadWorkspace(
|
if (!currentWorkspace) {
|
||||||
dataCenter.workspaces[0].id
|
currentWorkspace = await dataCenter.loadWorkspace(
|
||||||
);
|
dataCenter.workspaces[0].id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
setAppState({
|
setAppState({
|
||||||
dataCenter,
|
dataCenter,
|
||||||
@@ -104,6 +106,7 @@ 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;
|
||||||
@@ -111,6 +114,8 @@ export const AppStateProvider = ({
|
|||||||
if (workspaceId === currentWorkspaceId) {
|
if (workspaceId === currentWorkspaceId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const workspace = await dataCenter.loadWorkspace(workspaceId);
|
||||||
|
console.log('workspace: ', workspace);
|
||||||
|
|
||||||
setAppState({
|
setAppState({
|
||||||
...appState,
|
...appState,
|
||||||
|
|||||||
@@ -25,8 +25,9 @@ export class LocalProvider extends BaseProvider {
|
|||||||
public override async linkLocal(workspace: Workspace) {
|
public override async linkLocal(workspace: Workspace) {
|
||||||
assert(workspace.room);
|
assert(workspace.room);
|
||||||
let idb = this._idbMap.get(workspace.room);
|
let idb = this._idbMap.get(workspace.room);
|
||||||
idb?.destroy();
|
if (!idb) {
|
||||||
idb = new IndexedDBProvider(workspace.room, workspace.doc);
|
idb = new IndexedDBProvider(workspace.room, workspace.doc);
|
||||||
|
}
|
||||||
this._idbMap.set(workspace.room, idb);
|
this._idbMap.set(workspace.room, idb);
|
||||||
this._logger('Local data loaded');
|
this._logger('Local data loaded');
|
||||||
return workspace;
|
return workspace;
|
||||||
|
|||||||
Reference in New Issue
Block a user