fix: fix seo title

This commit is contained in:
fantasticit 2022-04-13 09:06:04 +08:00
parent 3e0d8a4781
commit f1b039a687
6 changed files with 66 additions and 55 deletions

View File

@ -1,4 +1,4 @@
import React from 'react'; import React, { useEffect } from 'react';
import { Helmet } from 'react-helmet'; import { Helmet } from 'react-helmet';
interface IProps { interface IProps {
@ -9,6 +9,10 @@ interface IProps {
const buildTitle = (title) => `${title} - 云策文档`; const buildTitle = (title) => `${title} - 云策文档`;
export const Seo: React.FC<IProps> = ({ title, needTitleSuffix = true }) => { export const Seo: React.FC<IProps> = ({ title, needTitleSuffix = true }) => {
useEffect(() => {
window.document.title = needTitleSuffix ? buildTitle(title) : title;
}, [title, needTitleSuffix]);
return ( return (
<Helmet> <Helmet>
<title>{needTitleSuffix ? buildTitle(title) : title}</title> <title>{needTitleSuffix ? buildTitle(title) : title}</title>

View File

@ -13,8 +13,8 @@ interface IProps {
wikiId: string; wikiId: string;
} }
export const WorkspaceDocs: React.FC<IProps> = ({ wikiId }) => { export const Documents: React.FC<IProps> = ({ wikiId }) => {
const { data: workspace, loading: workspaceLoading, toggleStatus: toggleWorkspaceStatus } = useWikiDetail(wikiId); const { data: wiki, loading: wikiLoading, toggleStatus: toggleWorkspaceStatus } = useWikiDetail(wikiId);
const { data: tocs, loading } = useWikiTocs(wikiId); const { data: tocs, loading } = useWikiTocs(wikiId);
const documents = flattenTree2Array(tocs).map((d) => { const documents = flattenTree2Array(tocs).map((d) => {
d.label = d.title; d.label = d.title;
@ -22,7 +22,7 @@ export const WorkspaceDocs: React.FC<IProps> = ({ wikiId }) => {
return d; return d;
}); });
const [nextStatus, setNextStatus] = useState(''); const [nextStatus, setNextStatus] = useState('');
const isPublic = useMemo(() => workspace && isPublicWiki(workspace.status), [workspace]); const isPublic = useMemo(() => wiki && isPublicWiki(wiki.status), [wiki]);
const [publicDocumentIds, setPublicDocumentIds] = useState([]); // 公开的 const [publicDocumentIds, setPublicDocumentIds] = useState([]); // 公开的
const privateDocumentIds = useMemo(() => { const privateDocumentIds = useMemo(() => {
return documents.filter((doc) => !publicDocumentIds.includes(doc.id)).map((doc) => doc.id); return documents.filter((doc) => !publicDocumentIds.includes(doc.id)).map((doc) => doc.id);
@ -69,9 +69,9 @@ export const WorkspaceDocs: React.FC<IProps> = ({ wikiId }) => {
}, []); }, []);
useEffect(() => { useEffect(() => {
if (!workspace) return; if (!wiki) return;
setNextStatus(workspace.status); setNextStatus(wiki.status);
}, [workspace]); }, [wiki]);
useEffect(() => { useEffect(() => {
if (!documents.length) return; if (!documents.length) return;

View File

@ -1,9 +1,10 @@
import React from 'react'; import React from 'react';
import { Tabs, TabPane } from '@douyinfe/semi-ui'; import { Tabs, TabPane } from '@douyinfe/semi-ui';
import { Seo } from 'components/seo';
import { useWikiDetail } from 'data/wiki'; import { useWikiDetail } from 'data/wiki';
import { Base } from './base'; import { Base } from './base';
import { Users } from './users'; import { Users } from './users';
import { WorkspaceDocs } from './documents'; import { Documents } from './documents';
import { More } from './more'; import { More } from './more';
interface IProps { interface IProps {
@ -12,23 +13,33 @@ interface IProps {
onNavigate: (arg: string) => void; onNavigate: (arg: string) => void;
} }
const TitleMap = {
base: '基础信息',
users: '成员管理',
docs: '隐私管理',
more: '更多',
};
export const WikiSetting: React.FC<IProps> = ({ wikiId, tab, onNavigate }) => { export const WikiSetting: React.FC<IProps> = ({ wikiId, tab, onNavigate }) => {
const { data, loading, error, update } = useWikiDetail(wikiId); const { data, update } = useWikiDetail(wikiId);
return ( return (
<Tabs lazyRender type="line" activeKey={tab} onChange={onNavigate}> <>
<TabPane tab="基础信息" itemKey="base"> <Seo title={TitleMap[tab]} />
<Base wiki={data} update={update as any} /> <Tabs lazyRender type="line" activeKey={tab} onChange={onNavigate}>
</TabPane> <TabPane tab={TitleMap['base']} itemKey="base">
<TabPane tab="成员管理" itemKey="users"> <Base wiki={data} update={update as any} />
<Users wikiId={wikiId} /> </TabPane>
</TabPane> <TabPane tab={TitleMap['users']} itemKey="users">
<TabPane tab="隐私管理" itemKey="docs"> <Users wikiId={wikiId} />
<WorkspaceDocs wikiId={wikiId} /> </TabPane>
</TabPane> <TabPane tab={TitleMap['docs']} itemKey="docs">
<TabPane tab="更多" itemKey="more"> <Documents wikiId={wikiId} />
<More wikiId={wikiId} /> </TabPane>
</TabPane> <TabPane tab={TitleMap['more']} itemKey="more">
</Tabs> <More wikiId={wikiId} />
</TabPane>
</Tabs>
</>
); );
}; };

View File

@ -4,8 +4,6 @@ import { Avatar, Button, Typography, Skeleton, Tooltip } from '@douyinfe/semi-ui
import { IconPlus } from '@douyinfe/semi-icons'; import { IconPlus } from '@douyinfe/semi-icons';
import { isPublicWiki } from '@think/domains'; import { isPublicWiki } from '@think/domains';
import { useWikiDetail, useWikiTocs } from 'data/wiki'; import { useWikiDetail, useWikiTocs } from 'data/wiki';
import { useToggle } from 'hooks/use-toggle';
import { Seo } from 'components/seo';
import { findParents } from 'components/wiki/tocs/utils'; import { findParents } from 'components/wiki/tocs/utils';
import { IconDocument, IconSetting, IconOverview, IconGlobe } from 'components/icons'; import { IconDocument, IconSetting, IconOverview, IconGlobe } from 'components/icons';
import { DataRender } from 'components/data-render'; import { DataRender } from 'components/data-render';
@ -19,20 +17,19 @@ interface IProps {
documentId?: string; documentId?: string;
docAsLink?: string; docAsLink?: string;
getDocLink?: (arg: string) => string; getDocLink?: (arg: string) => string;
pageTitle: string; // pageTitle: string;
} }
const { Text } = Typography; const { Text } = Typography;
export const WikiTocs: React.FC<IProps> = ({ export const WikiTocs: React.FC<IProps> = ({
pageTitle, // pageTitle,
wikiId, wikiId,
documentId = null, documentId = null,
docAsLink = '/wiki/[wikiId]/document/[documentId]', docAsLink = '/wiki/[wikiId]/document/[documentId]',
getDocLink = (documentId) => `/wiki/${wikiId}/document/${documentId}`, getDocLink = (documentId) => `/wiki/${wikiId}/document/${documentId}`,
}) => { }) => {
const { pathname } = useRouter(); const { pathname } = useRouter();
const [visible, toggleVisible] = useToggle(false);
const { data: wiki, loading: wikiLoading, error: wikiError } = useWikiDetail(wikiId); const { data: wiki, loading: wikiLoading, error: wikiError } = useWikiDetail(wikiId);
const { data: tocs, loading: tocsLoading, error: tocsError, refresh } = useWikiTocs(wikiId); const { data: tocs, loading: tocsLoading, error: tocsError, refresh } = useWikiTocs(wikiId);
const [parentIds, setParentIds] = useState<Array<string>>([]); const [parentIds, setParentIds] = useState<Array<string>>([]);
@ -74,28 +71,25 @@ export const WikiTocs: React.FC<IProps> = ({
} }
error={wikiError} error={wikiError}
normalContent={() => ( normalContent={() => (
<> <NavItem
<Seo title={wiki.name + ' - ' + pageTitle} /> icon={
<NavItem <Avatar
icon={ shape="square"
<Avatar size="small"
shape="square" src={wiki.avatar}
size="small" style={{
src={wiki.avatar} marginRight: 8,
style={{ width: 24,
marginRight: 8, height: 24,
width: 24, borderRadius: 4,
height: 24, }}
borderRadius: 4, >
}} {wiki.name.charAt(0)}
> </Avatar>
{wiki.name.charAt(0)} }
</Avatar> text={<Text strong>{wiki.name}</Text>}
} hoverable={false}
text={<Text strong>{wiki.name}</Text>} />
hoverable={false}
/>
</>
)} )}
/> />

View File

@ -1,16 +1,17 @@
import { NextPage } from 'next'; import { NextPage } from 'next';
import Router, { useRouter } from 'next/router'; import Router, { useRouter } from 'next/router';
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { Typography, List, Tabs, TabPane, Tree } from '@douyinfe/semi-ui'; import { Typography, List, Tabs, TabPane } from '@douyinfe/semi-ui';
import { CreateDocumentIllustration } from 'illustrations/create-document'; import { CreateDocumentIllustration } from 'illustrations/create-document';
import { DoubleColumnLayout } from 'layouts/double-column'; import { DoubleColumnLayout } from 'layouts/double-column';
import { Seo } from 'components/seo';
import { DataRender } from 'components/data-render'; import { DataRender } from 'components/data-render';
import { WikiTocs } from 'components/wiki/tocs'; import { WikiTocs } from 'components/wiki/tocs';
import { WikiTocsManager } from 'components/wiki/tocs/manager'; import { WikiTocsManager } from 'components/wiki/tocs/manager';
import { useWikiDocs } from 'data/wiki';
import { DocumentCardPlaceholder, DocumentCard } from 'components/document/card'; import { DocumentCardPlaceholder, DocumentCard } from 'components/document/card';
import { Empty } from 'components/empty'; import { Empty } from 'components/empty';
import { DocumentCreator } from 'components/document-creator'; import { DocumentCreator } from 'components/document-creator';
import { useWikiDocs } from 'data/wiki';
interface IProps { interface IProps {
wikiId: string; wikiId: string;
@ -79,9 +80,10 @@ const Page: NextPage<IProps> = ({ wikiId }) => {
return ( return (
<DoubleColumnLayout <DoubleColumnLayout
leftNode={<WikiTocs pageTitle="文档管理" wikiId={wikiId} />} leftNode={<WikiTocs wikiId={wikiId} />}
rightNode={ rightNode={
<> <>
<Seo title={tab === 'documents' ? '全部文档' : '目录管理'} />
<Title heading={3} style={{ marginBottom: 24 }}> <Title heading={3} style={{ marginBottom: 24 }}>
</Title> </Title>

View File

@ -26,9 +26,9 @@ const Page: NextPage<IProps> = ({ wikiId }) => {
return ( return (
<DoubleColumnLayout <DoubleColumnLayout
leftNode={<WikiTocs pageTitle="设置" wikiId={wikiId} />} leftNode={<WikiTocs wikiId={wikiId} />}
rightNode={<WikiSetting wikiId={wikiId} tab={tab} onNavigate={(tab) => navigate(tab)()} />} rightNode={<WikiSetting wikiId={wikiId} tab={tab} onNavigate={(tab) => navigate(tab)()} />}
></DoubleColumnLayout> />
); );
}; };