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) {