mirror of https://github.com/fantasticit/think.git
feat: now we can see all public wikis
This commit is contained in:
parent
94425befcf
commit
e7031776a8
|
@ -9,11 +9,19 @@ import styles from './index.module.scss';
|
|||
|
||||
const { Text, Paragraph } = Typography;
|
||||
|
||||
export const WikiCard: React.FC<{ wiki: IWiki }> = ({ wiki }) => {
|
||||
export const WikiCard: React.FC<{ wiki: IWiki; shareMode?: boolean }> = ({
|
||||
wiki,
|
||||
shareMode = false,
|
||||
}) => {
|
||||
return (
|
||||
<div className={styles.cardWrap}>
|
||||
<Link href={{ pathname: `/wiki/[wikiId]`, query: { wikiId: wiki.id } }}>
|
||||
<a>
|
||||
<Link
|
||||
href={{
|
||||
pathname: `${shareMode ? '/share' : ''}/wiki/[wikiId]`,
|
||||
query: { wikiId: wiki.id },
|
||||
}}
|
||||
>
|
||||
<a target={shareMode ? '_blank' : '_self'}>
|
||||
<header>
|
||||
<Avatar
|
||||
shape="square"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { CollectType, IDocument, IUser, IWiki, IWikiUser } from '@think/domains';
|
||||
import useSWR from 'swr';
|
||||
import { useState } from 'react';
|
||||
import { HttpClient } from 'services/HttpClient';
|
||||
|
||||
export type ICreateWiki = Pick<IWiki, 'name' | 'description'>;
|
||||
|
@ -276,3 +277,24 @@ export const usePublicWikiTocs = (wikiId) => {
|
|||
|
||||
return { data, loading, error, refresh: mutate };
|
||||
};
|
||||
|
||||
/**
|
||||
* 文档评论
|
||||
* @param documentId
|
||||
* @returns
|
||||
*/
|
||||
export const useAllPublicWikis = () => {
|
||||
const [page, setPage] = useState(1);
|
||||
const { data, error, mutate } = useSWR<{
|
||||
data: Array<IWiki>;
|
||||
total: number;
|
||||
}>(`/wiki/public/wikis?page=${page}`, (url) => HttpClient.get(url));
|
||||
const loading = !data && !error;
|
||||
|
||||
return {
|
||||
data,
|
||||
loading,
|
||||
error,
|
||||
setPage,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -78,6 +78,19 @@ export const RouterHeader: React.FC = () => {
|
|||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
itemKey: '/find',
|
||||
text: (
|
||||
<Link href="/find">
|
||||
<a>发现</a>
|
||||
</Link>
|
||||
),
|
||||
onClick: () => {
|
||||
Router.push({
|
||||
pathname: `/find`,
|
||||
});
|
||||
},
|
||||
},
|
||||
]}
|
||||
footer={
|
||||
<Space>
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
import type { NextPage } from 'next';
|
||||
import React from 'react';
|
||||
import { List, Pagination, Typography } from '@douyinfe/semi-ui';
|
||||
import { SingleColumnLayout } from 'layouts/single-column';
|
||||
import { useAllPublicWikis } from 'data/wiki';
|
||||
import { Empty } from 'components/empty';
|
||||
import { Seo } from 'components/seo';
|
||||
import { DataRender } from 'components/data-render';
|
||||
import { WikiCardPlaceholder, WikiCard } from 'components/wiki/card';
|
||||
|
||||
const grid = {
|
||||
gutter: 16,
|
||||
xs: 24,
|
||||
sm: 12,
|
||||
md: 12,
|
||||
lg: 8,
|
||||
xl: 8,
|
||||
};
|
||||
|
||||
const { Title } = Typography;
|
||||
|
||||
const Page: NextPage = () => {
|
||||
const { data, loading, error, setPage } = useAllPublicWikis();
|
||||
|
||||
console.log(data);
|
||||
|
||||
return (
|
||||
<SingleColumnLayout>
|
||||
<Seo title="发现" />
|
||||
<div className="container">
|
||||
<Title heading={3} style={{ marginBottom: 24 }}>
|
||||
发现
|
||||
</Title>
|
||||
<DataRender
|
||||
loading={loading}
|
||||
loadingContent={() => (
|
||||
<List
|
||||
grid={grid}
|
||||
dataSource={[1, 2, 3]}
|
||||
renderItem={() => (
|
||||
<List.Item>
|
||||
<WikiCardPlaceholder />
|
||||
</List.Item>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
error={error}
|
||||
normalContent={() => (
|
||||
<>
|
||||
<List
|
||||
grid={grid}
|
||||
dataSource={data.data}
|
||||
renderItem={(wiki) => (
|
||||
<List.Item>
|
||||
<WikiCard wiki={wiki} shareMode />
|
||||
</List.Item>
|
||||
)}
|
||||
emptyContent={<Empty message={'暂无数据'} />}
|
||||
/>
|
||||
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
||||
<Pagination total={data.total} pageSize={12} onPageChange={setPage} />
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</SingleColumnLayout>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
|
@ -174,4 +174,11 @@ export class WikiController {
|
|||
async getPublicWorkspaceDetail(@Param('id') wikiId) {
|
||||
return await this.wikiService.getPublicWikiDetail(wikiId);
|
||||
}
|
||||
|
||||
@UseInterceptors(ClassSerializerInterceptor)
|
||||
@Get('public/wikis')
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async getAllPublicWikis(@Query() pagination: IPagination) {
|
||||
return await this.wikiService.getAllPublicWikis(pagination);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -604,4 +604,32 @@ export class WikiService {
|
|||
async getPublicWikiTocs(wikiId) {
|
||||
return await this.documentService.getPublicWikiTocs(wikiId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户所有知识库
|
||||
* @param user
|
||||
* @param pagination
|
||||
* @returns
|
||||
*/
|
||||
async getAllPublicWikis(pagination: IPagination) {
|
||||
const { page = 1, pageSize = 12 } = pagination;
|
||||
const query = await this.wikiRepo
|
||||
.createQueryBuilder('wiki')
|
||||
.where('wiki.status=:status')
|
||||
.setParameter('status', WikiStatus.public);
|
||||
|
||||
query.skip((+page - 1) * +pageSize);
|
||||
query.take(+pageSize);
|
||||
|
||||
const [wikis, total] = await query.getManyAndCount();
|
||||
|
||||
const ret = await Promise.all(
|
||||
wikis.map(async (wiki) => {
|
||||
const createUser = await this.userService.findById(wiki.createUserId);
|
||||
return { ...wiki, createUser };
|
||||
})
|
||||
);
|
||||
|
||||
return { data: ret, total };
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue