1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
import { LinksByNodeId, NodeByCite, NodeById } from '../../pages/index'
import { GraphData, NodeObject, LinkObject } from 'force-graph'
import { normalizeLinkEnds } from '../../pages/index'
import { VStack, Box, Button, Heading, StackDivider } from '@chakra-ui/react'
import React from 'react'
import { ProcessedOrg } from '../../util/processOrg'
export interface BacklinksProps {
previewNode: any
setPreviewNode: any
nodeById: NodeById
linksByNodeId: LinksByNodeId
nodeByCite: NodeByCite
setSidebarHighlightedNode: OrgRoamNode
openContextMenu: any
}
import { PreviewLink } from './Link'
import { OrgRoamNode } from '../../api'
export const Backlinks = (props: BacklinksProps) => {
const {
previewNode,
setPreviewNode,
setSidebarHighlightedNode,
nodeById,
linksByNodeId,
nodeByCite,
openContextMenu,
} = props
const links = linksByNodeId[previewNode?.id] ?? []
const backLinks = links
.filter((link: LinkObject) => {
const [source, target] = normalizeLinkEnds(link)
return source !== previewNode?.id
})
.map((l) => l.source)
return (
<Box>
<Heading pt={4}>{`Backlinks (${backLinks.length})`}</Heading>
<VStack
pt={2}
spacing={3}
alignItems="start"
divider={<StackDivider borderColor="gray.500" />}
align="stretch"
color="gray.800"
>
{previewNode?.id &&
backLinks.map((link) => {
const title = nodeById[link as string]?.title ?? ''
return (
<Box overflow="hidden" p={3} bg="gray.300" width="100%" key={link}>
<PreviewLink
nodeByCite={nodeByCite}
setSidebarHighlightedNode={setSidebarHighlightedNode}
href={`id:${link as string}`}
nodeById={nodeById}
setPreviewNode={setPreviewNode}
openContextMenu={openContextMenu}
>
{nodeById[link as string]?.title}
</PreviewLink>
</Box>
)
})}
</VStack>
</Box>
)
}
|