dh_demo

DreamHanks demo project
git clone git://git.lair.cx/dh_demo
Log | Files | Refs | README

commit 3d70e10ff3815e60e5f336da1aee80456b560f61
parent 0ab32acc99d9083771ea800de1024542e445878e
Author: Yongbin Kim <iam@yongbin.kim>
Date:   Sun, 29 Jan 2023 04:02:30 +0900

fix: Wiki 관련 페이지에서 WikiBase 사용하도록 수정

Signed-off-by: Yongbin Kim <iam@yongbin.kim>

Diffstat:
Mcomponents/wiki/WikiBase.tsx | 4+---
Mcomponents/wiki/WikiToolbar.tsx | 7+------
Mpages/edit/[slug]/[...path].tsx | 36+++++++++++++++++++++++++-----------
Mpages/logs/[slug]/[...path].tsx | 11+++--------
Mpages/talk/[slug]/[...path].tsx | 9+++------
Mpages/wiki/[slug]/[...path].tsx | 21++++++++++++---------
6 files changed, 45 insertions(+), 43 deletions(-)

diff --git a/components/wiki/WikiBase.tsx b/components/wiki/WikiBase.tsx @@ -21,9 +21,7 @@ export default function WikiBase (props: WikiBaseProps) { <Container> <WikiToolbar pageKind={props.pageKind} /> - <Section> - {props.children} - </Section> + {props.children} </Container> </> ) diff --git a/components/wiki/WikiToolbar.tsx b/components/wiki/WikiToolbar.tsx @@ -2,7 +2,7 @@ import Link from 'next/link' import styles from './WikiToolbar.module.css'; export interface WikiToolbarProps { - pageKind: 'wiki' | 'edit' | 'talk' | 'xref' | 'logs' + pageKind: 'wiki' | 'edit' | 'talk' | 'logs' } export default function WikiToolbar (props: WikiToolbarProps) { @@ -23,11 +23,6 @@ export default function WikiToolbar (props: WikiToolbarProps) { Talks </Link> )} - {props.pageKind !== 'xref' && ( - <Link href={`/xref/test/test`} className={styles['item']}> - Backlinks - </Link> - )} {props.pageKind !== 'logs' && ( <Link href={'/logs/test/test'} className={styles['item']}> History diff --git a/pages/edit/[slug]/[...path].tsx b/pages/edit/[slug]/[...path].tsx @@ -1,6 +1,8 @@ +import { useSocket } from '@/components/contexts/SocketContext' import { SubmitButton } from '@/components/elements/Button' import Fields from '@/components/form/Fields' import Form from '@/components/form/Form' +import Section from '@/components/layout/Section' import WikiBase from '@/components/wiki/WikiBase' import WikiEditor from '@/components/wiki/WikiEditor' import { useForm } from '@/lib/hooks/use_form' @@ -12,6 +14,7 @@ import { authenticationFromCookies } from '@/lib/security/token' import { getSlugAndPath } from '@/lib/utils/wiki' import { GetServerSideProps } from 'next' import { useRouter } from 'next/router' +import { useEffect } from 'react' export interface WikiEditPageProps { slug: string @@ -70,6 +73,15 @@ interface WikiEditFormFields { export default function WikiEditPage (props: WikiEditPageProps) { const router = useRouter() + const socket = useSocket() + + // 다른 사용자가 문서를 편집했을 때 + // + useEffect(() => { + return socket.on('pageChange', ({ payload }) => { + + }) + }, []) const [fields, updateFields, submit, isLoading, result, error] = useForm<WikiEditFormFields>( { method: 'PUT', url: `/api/wiki/${props.slug}/${props.path}` }, @@ -81,17 +93,19 @@ export default function WikiEditPage (props: WikiEditPageProps) { ) return ( - <WikiBase title={`수정중: ${props.path}`} pageKind="edit"> - <WikiEditor - value={fields.content} - onValueChange={updateFields.bind(null, 'content')} - /> - - <Form onSubmit={submit}> - <Fields> - <SubmitButton color="primary" disabled={isLoading} value="저장"/> - </Fields> - </Form> + <WikiBase title={`편집: ${props.path}`} pageKind="edit"> + <Section> + <WikiEditor + value={fields.content} + onValueChange={updateFields.bind(null, 'content')} + /> + + <Form onSubmit={submit}> + <Fields> + <SubmitButton color="primary" disabled={isLoading} value="저장"/> + </Fields> + </Form> + </Section> </WikiBase> ) } diff --git a/pages/logs/[slug]/[...path].tsx b/pages/logs/[slug]/[...path].tsx @@ -3,6 +3,7 @@ import Container from '@/components/layout/Container' import Hero from '@/components/layout/Hero' import Section from '@/components/layout/Section' import { Pagination } from '@/components/Pagination' +import WikiBase from '@/components/wiki/WikiBase' import { withConnection } from '@/lib/model_helpers' import { getWikiAndPageACLViaPath } from '@/lib/models/wiki_acl' import { countWikiChanges, getWikiChanges, WikiChangeListItem } from '@/lib/models/wiki_change' @@ -60,11 +61,7 @@ export default function WikiLogsPage (props: WikiLogsPageProps) { const [slug, path] = useMemo(() => getSlugAndPath(router), [router]) return ( <> - <Hero> - <Title kind="headline" size="large">편집 기록: {path}</Title> - </Hero> - - <Container> + <WikiBase pageKind={'logs'} title={`편집 기록: ${path}`}> <Section> <ul> {props.changes.map((change, i, changes) => ( @@ -88,12 +85,10 @@ export default function WikiLogsPage (props: WikiLogsPageProps) { </li> ))} </ul> - </Section> - <Section> <Pagination page={props.page} totalCount={props.count} pageSize={PAGE_SIZE}/> </Section> - </Container> + </WikiBase> </> ) } diff --git a/pages/talk/[slug]/[...path].tsx b/pages/talk/[slug]/[...path].tsx @@ -9,6 +9,7 @@ import Hero from '@/components/layout/Hero' import Section from '@/components/layout/Section' import { Pagination } from '@/components/Pagination' import ThreadList from '@/components/threads/ThreadList' +import WikiBase from '@/components/wiki/WikiBase' import { ApiError } from '@/lib/apierror' import { withConnection } from '@/lib/model_helpers' import { Thread } from '@/lib/models/thread' @@ -67,11 +68,7 @@ export const getServerSideProps: GetServerSideProps<TestPageProps> = async (cont export default function TestPage (props: TestPageProps) { return ( - <Container> - <Hero> - <Title kind="headline" size="large">{props.pagePath}</Title> - </Hero> - + <WikiBase pageKind={'talk'} title={props.pagePath}> <Section> {props.talks.length === 0 ? ( <div>No talks</div> @@ -93,7 +90,7 @@ export default function TestPage (props: TestPageProps) { <Title>새 주제 만들기</Title> <NewTalk {...props} /> </Section> - </Container> + </WikiBase> ) } diff --git a/pages/wiki/[slug]/[...path].tsx b/pages/wiki/[slug]/[...path].tsx @@ -1,3 +1,4 @@ +import Section from '@/components/layout/Section' import RevisionAlert from '@/components/wiki/RevisionAlert' import WikiArticle from '@/components/wiki/WikiArticle' import WikiBase from '@/components/wiki/WikiBase' @@ -96,15 +97,17 @@ export default function WikiViewPage (props: WikiViewPageProps) { return ( <> <WikiBase pageKind={'wiki'} title={path ?? ''}> - <WikiArticle> - {rev != null && ( - <RevisionAlert - page={props.page} - recentURL={`/wiki/${slug}/${path}`} - /> - )} - <div dangerouslySetInnerHTML={{ __html: props.html }}/> - </WikiArticle> + <Section> + <WikiArticle> + {rev != null && ( + <RevisionAlert + page={props.page} + recentURL={`/wiki/${slug}/${path}`} + /> + )} + <div dangerouslySetInnerHTML={{ __html: props.html }}/> + </WikiArticle> + </Section> </WikiBase> </> )