diff --git a/renderer/components/detail/Detail.tsx b/renderer/components/detail/Detail.tsx new file mode 100644 index 00000000..56bb9b22 --- /dev/null +++ b/renderer/components/detail/Detail.tsx @@ -0,0 +1,44 @@ +import { useRouter } from 'next/router' +import { useEffect, useState } from 'react' +import { FaChevronLeft, FaX } from 'react-icons/fa6' +import Thread from './Thread' +import { MegalodonInterface } from 'megalodon' + +type Props = { + client: MegalodonInterface +} + +export default function Detail(props: Props) { + const [target, setTarget] = useState<'status' | null>(null) + const router = useRouter() + + useEffect(() => { + if (router.query.status_id) { + setTarget('status') + } else { + setTarget(null) + } + }, [router.query]) + + const back = () => { + router.back() + } + + const close = () => { + router.push({ query: { id: router.query.id, timeline: router.query.timeline } }) + } + + return ( + <> + {target && ( +
+
+ + +
+ {target === 'status' && } +
+ )} + + ) +} diff --git a/renderer/components/detail/Thread.tsx b/renderer/components/detail/Thread.tsx new file mode 100644 index 00000000..fff388a3 --- /dev/null +++ b/renderer/components/detail/Thread.tsx @@ -0,0 +1,38 @@ +import { Entity, MegalodonInterface } from 'megalodon' +import { useEffect, useState } from 'react' +import { Virtuoso } from 'react-virtuoso' +import Status from '../timelines/status/Status' + +type Props = { + client: MegalodonInterface + status_id: string +} + +export default function Thread(props: Props) { + const [ancestors, setAncestors] = useState>([]) + const [descendants, setDescendants] = useState>([]) + const [status, setStatus] = useState(null) + + useEffect(() => { + if (props.status_id) { + const f = async () => { + const s = await props.client.getStatus(props.status_id) + setStatus(s.data) + const res = await props.client.getStatusContext(props.status_id) + setAncestors(res.data.ancestors) + setDescendants(res.data.descendants) + } + f() + } + }, [props.status_id]) + + return ( + <> + s !== null)} + itemContent={(_, status) => {}} />} + /> + + ) +} diff --git a/renderer/components/layouts/timelines.tsx b/renderer/components/layouts/timelines.tsx index 9e93f09c..ef6a0db3 100644 --- a/renderer/components/layouts/timelines.tsx +++ b/renderer/components/layouts/timelines.tsx @@ -70,7 +70,7 @@ export default function Layout({ children }: LayoutProps) { {pages.map(page => ( - router.push(page.path)}> + router.push(page.path)}> {page.title} ))} diff --git a/renderer/components/timelines/Timeline.tsx b/renderer/components/timelines/Timeline.tsx index 566732b3..4f783de5 100644 --- a/renderer/components/timelines/Timeline.tsx +++ b/renderer/components/timelines/Timeline.tsx @@ -5,6 +5,7 @@ import { useEffect, useState, useCallback, useRef } from 'react' import { Virtuoso } from 'react-virtuoso' import Status from './status/Status' import { FormattedMessage, useIntl } from 'react-intl' +import Detail from '../detail/Detail' const TIMELINE_STATUSES_COUNT = 30 const TIMELINE_MAX_STATUSES = 2147483647 @@ -159,6 +160,7 @@ export default function Timeline(props: Props) { )} /> + ) } diff --git a/renderer/components/timelines/status/Status.tsx b/renderer/components/timelines/status/Status.tsx index b8c68dd7..8fc6bd9a 100644 --- a/renderer/components/timelines/status/Status.tsx +++ b/renderer/components/timelines/status/Status.tsx @@ -8,6 +8,7 @@ import Card from './Card' import Poll from './Poll' import { FormattedMessage } from 'react-intl' import Actions from './Actions' +import { useRouter } from 'next/router' type Props = { status: Entity.Status @@ -17,12 +18,17 @@ type Props = { export default function Status(props: Props) { const status = originalStatus(props.status) + const router = useRouter() const onRefresh = async () => { const res = await props.client.getStatus(status.id) props.onRefresh(res.data) } + const openStatus = () => { + router.push({ query: { id: router.query.id, timeline: router.query.timeline, status_id: status.id } }) + } + return (
{rebloggedHeader(props.status)} @@ -39,7 +45,7 @@ export default function Status(props: Props) { > @{status.account.acct}
-
+
diff --git a/renderer/pages/accounts/[id]/[timeline].tsx b/renderer/pages/accounts/[id]/[timeline].tsx index 04308e29..5ed2179b 100644 --- a/renderer/pages/accounts/[id]/[timeline].tsx +++ b/renderer/pages/accounts/[id]/[timeline].tsx @@ -16,6 +16,7 @@ export default function Page() { useEffect(() => { if (router.query.id) { + console.log(router) const f = async () => { const a = await db.accounts.get(parseInt(router.query.id as string)) if (a) {