Merge branch 'feat/filesystem_and_search' into feat/migrate-layout

This commit is contained in:
QiShaoXuan
2022-12-21 20:24:46 +08:00
8 changed files with 82 additions and 289 deletions
@@ -44,6 +44,7 @@ export const SelectorPopperContent = () => {
{workspacesMeta.map(workspace => {
return (
<WorkspaceItem
type={workspace.type}
key={workspace.id}
id={workspace.id}
name={`workspace-${workspace.id}`}
@@ -7,11 +7,13 @@ import {
} from '../styles';
import { FooterSetting } from './FooterSetting';
import { FooterUsers } from './FooterUsers';
import { WorkspaceType } from '@pathfinder/data-services';
interface WorkspaceItemProps {
id: string;
name: string;
icon: string;
type: WorkspaceType;
onClick?: (workspaceId: string) => void;
}
@@ -19,6 +21,7 @@ export const WorkspaceItem = ({
id,
name,
icon,
type,
onClick,
}: WorkspaceItemProps) => {
const router = useRouter();
@@ -32,6 +35,7 @@ export const WorkspaceItem = ({
onClick={() => {
router.push(`/workspace/${id}`);
}}
isPrivate={type === WorkspaceType.Private}
>
<WorkspaceItemAvatar alt={name} src={icon}>
{name.charAt(0)}
@@ -58,17 +62,21 @@ const Name = styled('div')(({ theme }) => {
};
});
const StyledWrapper = styled(WorkspaceItemWrapper)({
'& .footer-setting': {
display: 'none',
},
':hover .footer-users': {
display: 'none',
},
':hover .footer-setting': {
display: 'block',
},
});
const StyledWrapper = styled(WorkspaceItemWrapper)<{ isPrivate: boolean }>(
({ isPrivate }) => {
return {
'& .footer-setting': {
display: 'none',
},
':hover .footer-users': {
display: isPrivate ? 'block' : 'none',
},
':hover .footer-setting': {
display: isPrivate ? 'none' : 'block',
},
};
}
);
const Footer = styled('div')({
width: '42px',
@@ -27,7 +27,7 @@ const Page = () => {
});
}, [workspace, currentWorkspaceId, createPage, router]);
return <div>Hello, there is [pageId]/index</div>;
return <div></div>;
};
export default Page;
@@ -1,7 +1,7 @@
import { useEffect } from 'react';
import type { Page } from '@blocksuite/store';
import {
createWebsocketDocProvider,
// createWebsocketDocProvider,
IndexedDBDocProvider,
Workspace,
} from '@blocksuite/store';
@@ -13,17 +13,18 @@ import type {
LoadWorkspaceHandler,
CreateEditorHandler,
} from './context';
import { downloadWorkspace } from '@pathfinder/data-services';
const getEditorParams = (workspaceId: string) => {
const providers = [];
const params = new URLSearchParams(location.search);
// const room = params.get('room') ?? 'AFFINE-pathfinder';
if (params.get('syncMode') === 'websocket') {
const WebsocketDocProvider = createWebsocketDocProvider(
`ws://${window.location.host}/collaboration/`
);
providers.push(WebsocketDocProvider);
}
// if (params.get('syncMode') === 'websocket') {
// const WebsocketDocProvider = createWebsocketDocProvider(
// `ws://${window.location.host}/collaboration/`
// );
// providers.push(WebsocketDocProvider);
// }
providers.push(IndexedDBDocProvider);
@@ -44,7 +45,7 @@ const DynamicBlocksuite = ({
}: Props) => {
useEffect(() => {
const openWorkspace: LoadWorkspaceHandler = (workspaceId: string) =>
new Promise(resolve => {
new Promise(async resolve => {
const workspace = new Workspace({
...getEditorParams(workspaceId as string),
}).register(BlockSchema);
@@ -53,7 +54,12 @@ const DynamicBlocksuite = ({
p => p instanceof IndexedDBDocProvider
);
if (indexDBProvider) {
(indexDBProvider as IndexedDBDocProvider)?.on('synced', () => {
(indexDBProvider as IndexedDBDocProvider)?.on('synced', async () => {
const updates = await downloadWorkspace({ workspaceId });
updates &&
Workspace.Y.applyUpdate(workspace.doc, new Uint8Array(updates));
// if after update, the space:meta is empty, then we need to get map with doc
workspace.doc.getMap('space:meta');
resolve(workspace);
});
} else {
@@ -118,6 +118,13 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
useEffect(() => {
const callback = async (user: AccessTokenMessage | null) => {
const workspacesMeta = user ? await getWorkspaces() : [];
const workspaces = await Promise.all(
workspacesMeta.map(async ({ id }) => {
const workspace = (await loadWorkspaceHandler?.(id)) || null;
return workspace;
})
);
// TODO: add meta info to workspace meta
setState(state => ({ ...state, user: user, workspacesMeta }));
};
authorizationEvent.onChange(callback);
@@ -125,7 +132,7 @@ export const AppStateProvider = ({ children }: { children?: ReactNode }) => {
return () => {
authorizationEvent.removeCallback(callback);
};
}, []);
}, [loadWorkspaceHandler]);
const context = useMemo(
() => ({