feat: add publish workspace page list and workspace page

This commit is contained in:
DiamondThree
2023-01-11 23:54:25 +08:00
parent d979acbba7
commit 753c59b534
9 changed files with 94 additions and 56 deletions

View File

@@ -11,10 +11,12 @@ const EDITOR_VERSION = enableDebugLocal
const profileTarget = { const profileTarget = {
ac: '100.85.73.88:12001', ac: '100.85.73.88:12001',
dev: '100.77.180.48:11001', dev: '192.168.65.20:3000',
local: '127.0.0.1:3000', local: '127.0.0.1:3000',
}; };
// 100.77.180.48:11001
const getRedirectConfig = profile => { const getRedirectConfig = profile => {
const target = profileTarget[profile || 'dev'] || profileTarget['dev']; const target = profileTarget[profile || 'dev'] || profileTarget['dev'];

View File

@@ -31,7 +31,6 @@ export const Editor = ({ page, workspace, setEditor }: Props) => {
const editor = new EditorContainer(); const editor = new EditorContainer();
editor.page = page; editor.page = page;
editorContainer.current?.appendChild(editor); editorContainer.current?.appendChild(editor);
if (page.isEmpty) { if (page.isEmpty) {
const isFirstPage = workspace?.meta.pageMetas.length === 1; const isFirstPage = workspace?.meta.pageMetas.length === 1;

View File

@@ -67,10 +67,12 @@ export const PageList = ({
pageList, pageList,
showFavoriteTag = false, showFavoriteTag = false,
isTrash = false, isTrash = false,
isPublic = false,
}: { }: {
pageList: PageMeta[]; pageList: PageMeta[];
showFavoriteTag?: boolean; showFavoriteTag?: boolean;
isTrash?: boolean; isTrash?: boolean;
isPublic?: boolean;
}) => { }) => {
const router = useRouter(); const router = useRouter();
const { currentWorkspace } = useAppState(); const { currentWorkspace } = useAppState();
@@ -98,9 +100,15 @@ export const PageList = ({
<StyledTableRow <StyledTableRow
key={`${pageMeta.id}-${index}`} key={`${pageMeta.id}-${index}`}
onClick={() => { onClick={() => {
router.push( if (isPublic) {
`/workspace/${currentWorkspace?.id}/${pageMeta.id}` router.push(
); `/public-workspace/${router.query.workspaceId}/${pageMeta.id}`
);
} else {
router.push(
`/workspace/${currentWorkspace?.id}/${pageMeta.id}`
);
}
}} }}
> >
<TableCell> <TableCell>
@@ -124,19 +132,21 @@ export const PageList = ({
dateKey={isTrash ? 'trashDate' : 'updatedDate'} dateKey={isTrash ? 'trashDate' : 'updatedDate'}
backupKey={isTrash ? 'trashDate' : 'createDate'} backupKey={isTrash ? 'trashDate' : 'createDate'}
/> />
<TableCell {!isPublic ? (
style={{ padding: 0 }} <TableCell
data-testid={`more-actions-${pageMeta.id}`} style={{ padding: 0 }}
onClick={e => { data-testid={`more-actions-${pageMeta.id}`}
e.stopPropagation(); onClick={e => {
}} e.stopPropagation();
> }}
{isTrash ? ( >
<TrashOperationCell pageMeta={pageMeta} /> {isTrash ? (
) : ( <TrashOperationCell pageMeta={pageMeta} />
<OperationCell pageMeta={pageMeta} /> ) : (
)} <OperationCell pageMeta={pageMeta} />
</TableCell> )}
</TableCell>
) : null}
</StyledTableRow> </StyledTableRow>
); );
})} })}

View File

@@ -14,8 +14,7 @@ import { WorkspaceUnit } from '@affine/datacenter';
import { useWorkspaceHelper } from '@/hooks/use-workspace-helper'; import { useWorkspaceHelper } from '@/hooks/use-workspace-helper';
export const PublishPage = ({ workspace }: { workspace: WorkspaceUnit }) => { export const PublishPage = ({ workspace }: { workspace: WorkspaceUnit }) => {
const shareUrl = const shareUrl = window.location.host + '/public-workspace/' + workspace.id;
window.location.host + '/workspace/' + workspace.id + '?share=true';
const { publishWorkspace, enableWorkspace } = useWorkspaceHelper(); const { publishWorkspace, enableWorkspace } = useWorkspaceHelper();
const togglePublic = async (flag: boolean) => { const togglePublic = async (flag: boolean) => {

View File

@@ -1,6 +1,5 @@
import { styled } from '@/styles'; import { styled } from '@/styles';
import MuiAvatar from '@mui/material/Avatar'; import MuiAvatar from '@mui/material/Avatar';
import { Button } from '@/ui/button';
export const StyledMemberTitleContainer = styled('div')(() => { export const StyledMemberTitleContainer = styled('div')(() => {
return { return {

View File

@@ -1,6 +1,4 @@
import { styled } from '@/styles'; import { styled } from '@/styles';
import { Button } from '@/ui/button';
import MuiAvatar from '@mui/material/Avatar';
export const StyledSettingContainer = styled('div')(() => { export const StyledSettingContainer = styled('div')(() => {
return { return {

View File

@@ -1,37 +1,55 @@
import { ReactElement, useState } from 'react'; import { ReactElement, useEffect, useState } from 'react';
import { useAppState } from '@/providers/app-state-provider'; import { useAppState } from '@/providers/app-state-provider';
import type { NextPageWithLayout } from '../..//_app'; import type { NextPageWithLayout } from '../..//_app';
import { styled } from '@/styles';
import dynamic from 'next/dynamic'; import dynamic from 'next/dynamic';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { Page as PageStore, Workspace } from '@blocksuite/store';
const DynamicBlocksuite = dynamic(() => import('@/components/editor'), { const DynamicBlocksuite = dynamic(() => import('@/components/editor'), {
ssr: false, ssr: false,
}); });
const Page: NextPageWithLayout = () => { const Page: NextPageWithLayout = () => {
const [workspace, setWorkspace] = useState(null); const [workspace, setWorkspace] = useState<Workspace>();
const [page, setPage] = useState(null); const [page, setPage] = useState<PageStore>();
const { dataCenter } = useAppState(); const { dataCenter } = useAppState();
console.log('dataCenter: ', dataCenter);
const router = useRouter(); const router = useRouter();
useEffect(() => {
console.log(router.query.workspaceId); dataCenter
dataCenter .loadPublicWorkspace(router.query.workspaceId as string)
.loadPublicWorkspace(router.query.workspaceId as string) .then(data => {
.then(data => { if (data && data.blocksuiteWorkspace) {
console.log(data); setWorkspace(data.blocksuiteWorkspace);
}); if (
router.query.pageId &&
data.blocksuiteWorkspace.meta.pageMetas.find(
p => p.id === router.query.pageId
)
) {
const page = data.blocksuiteWorkspace?.getPage(
router.query.pageId as string
);
page && setPage(page);
} else {
router.push('/404');
}
}
})
.catch(() => {
router.push('/404');
});
}, [router, dataCenter]);
return ( return (
<> <PageContainer>
{workspace && page && ( {workspace && page && (
<DynamicBlocksuite <DynamicBlocksuite
page={page} page={page}
workspace={workspace} workspace={workspace}
setEditor={() => { setEditor={editor => {
console.log('test'); editor.readonly = true;
}} }}
/> />
)} )}
</> </PageContainer>
); );
}; };
@@ -40,3 +58,12 @@ Page.getLayout = function getLayout(page: ReactElement) {
}; };
export default Page; export default Page;
export const PageContainer = styled.div(({ theme }) => {
return {
height: 'calc(100vh)',
padding: '78px 72px',
overflowY: 'auto',
backgroundColor: theme.colors.pageBackground,
};
});

View File

@@ -1,29 +1,31 @@
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { AllPagesIcon } from '@blocksuite/icons'; import { ReactElement, useEffect, useState } from 'react';
import { PageListHeader } from '@/components/header'; import { PageMeta, useAppState } from '@/providers/app-state-provider';
import { ReactElement } from 'react';
import { useTranslation } from '@affine/i18n';
import { useAppState } from '@/providers/app-state-provider';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { PageContainer } from './[pageId]';
const All = () => { const All = () => {
const { pageList } = useAppState();
const { t } = useTranslation();
const { dataCenter } = useAppState(); const { dataCenter } = useAppState();
const router = useRouter(); const router = useRouter();
const [pageList, setPageList] = useState<PageMeta[]>([]);
useEffect(() => {
dataCenter
.loadPublicWorkspace(router.query.workspaceId as string)
.then(data => {
setPageList(data.blocksuiteWorkspace?.meta.pageMetas as PageMeta[]);
})
.catch(() => {
router.push('/404');
});
}, [router, dataCenter]);
console.log(router.query.workspaceId);
dataCenter
.loadPublicWorkspace(router.query.workspaceId as string)
.then(data => {
console.log(data);
});
return ( return (
<> <PageContainer>
<PageList <PageList
pageList={pageList.filter(p => !p.trash)} pageList={pageList.filter(p => !p.trash)}
showFavoriteTag={true} showFavoriteTag={false}
isPublic={true}
/> />
</> </PageContainer>
); );
}; };

View File

@@ -152,7 +152,9 @@ export class AffineProvider extends BaseProvider {
const updates = await this._apis.downloadWorkspace(workspaceId, published); const updates = await this._apis.downloadWorkspace(workspaceId, published);
if (updates && updates.byteLength) { if (updates && updates.byteLength) {
await new Promise(resolve => { await new Promise(resolve => {
doc.once('update', resolve); doc.once('update', () => {
setTimeout(resolve, 100);
});
BlocksuiteWorkspace.Y.applyUpdate(doc, new Uint8Array(updates)); BlocksuiteWorkspace.Y.applyUpdate(doc, new Uint8Array(updates));
}); });
} }