diff --git a/components/Tweaks/Filter/FilterPanel.tsx b/components/Tweaks/Filter/FilterPanel.tsx
index 55ff3e59..fc6d6315 100644
--- a/components/Tweaks/Filter/FilterPanel.tsx
+++ b/components/Tweaks/Filter/FilterPanel.tsx
@@ -136,6 +136,17 @@ const FilterPanel = (props: FilterPanelProps) => {
isChecked={filter.dailies}
>
+
+ Render Dailies as Links
+ {
+ setFilter((curr: typeof initialFilter) => {
+ return { ...curr, dailiesAsPassthrough: !curr.dailiesAsPassthrough }
+ })
+ }}
+ isChecked={filter.dailiesAsPassthrough}
+ >
+
Org-noter pages
{
+ return dailyDir && node.file?.includes(dailyDir);
+ }
const [hoverNode, setHoverNode] = useState(null)
@@ -831,6 +834,7 @@ export const Graph = function (props: GraphProps) {
const filteredLinksByNodeIdRef = useRef({})
const hiddenNodeIdsRef = useRef({})
+ const dailiesNodeIdsRef = useRef({})
const filteredGraphData = useMemo(() => {
hiddenNodeIdsRef.current = {}
const filteredNodes = graphData?.nodes
@@ -875,7 +879,8 @@ export const Graph = function (props: GraphProps) {
return false
}
- if (filter.dailies && dailyDir && node.file?.includes(dailyDir)) {
+ if ((filter.dailies || filter.dailiesAsPassthrough) && isDaily(node)) {
+ dailiesNodeIdsRef.current = {...dailiesNodeIdsRef.current, [node.id]: node }
hiddenNodeIdsRef.current = { ...hiddenNodeIdsRef.current, [node.id]: node }
return false
}
@@ -910,6 +915,12 @@ export const Graph = function (props: GraphProps) {
const filteredNodeIds = filteredNodes.map((node) => node.id as string)
const filteredLinks = graphData.links.filter((link) => {
const [sourceId, targetId] = normalizeLinkEnds(link)
+ // if we point to a daily and the config is set, check everything else that daily links to
+ // probably also make this a map? or just do it separately?
+ // after this function we'll only have links that are to nodes visible,
+ // which would have already filtered out dailies
+ // so we can just go through those, and recreate links based on what's in the dailies
+ // and what the dailies point to
if (
!filteredNodeIds.includes(sourceId as string) ||
!filteredNodeIds.includes(targetId as string)
@@ -926,7 +937,7 @@ export const Graph = function (props: GraphProps) {
return linkRoam.type !== 'heading'
})
- filteredLinksByNodeIdRef.current = filteredLinks.reduce((acc, linkArg) => {
+ const linkMapReducer = (acc: LinksByNodeId, linkArg: LinkObject) => {
const link = linkArg as OrgRoamLink
const [sourceId, targetId] = normalizeLinkEnds(link)
return {
@@ -934,8 +945,61 @@ export const Graph = function (props: GraphProps) {
[sourceId]: [...(acc[sourceId] ?? []), link],
[targetId]: [...(acc[targetId] ?? []), link],
}
- }, {})
+ }
+ filteredLinksByNodeIdRef.current = filteredLinks.reduce(linkMapReducer, {})
+ if (filter.dailiesAsPassthrough) {
+ let additionalLinksFromDailies: LinksByNodeId = {};
+ const allLinks = graphData.links.reduce(linkMapReducer, {})
+ debugger;
+ const seenLinks: {[key: string]: boolean} = {}
+ filteredNodeIds.forEach((n) => {
+ allLinks[n]?.forEach((l) => {
+ const [sourceId, targetId] = normalizeLinkEnds(l)
+ const daily = dailiesNodeIdsRef.current[sourceId]
+ if (daily) {
+ allLinks[sourceId]?.forEach((l) => {
+ const [skipSourceId, skipTargetId] = normalizeLinkEnds(l)
+ // bit of a hack, for some reason this is getting stuff not in the list
+ if (
+ !filteredNodeIds.includes(targetId as string) ||
+ !filteredNodeIds.includes(skipTargetId as string)
+ ) {
+ return
+ }
+ const newLink = {
+ source: targetId,
+ target: skipTargetId,
+ type: 'id'
+ }
+ if (seenLinks[newLink.source + '_' + newLink.target]) {
+ return
+ }
+ seenLinks[newLink.source + '_' + newLink.target] = true
+ additionalLinksFromDailies = {
+ ...additionalLinksFromDailies,
+ [n]: [
+ ...(additionalLinksFromDailies[n] ?? []),
+ newLink
+ ]
+ }
+ })
+ }
+ })
+ })
+ // Why isn't this overlyaying?
+ Object.keys(additionalLinksFromDailies).forEach((n) => {
+ filteredLinksByNodeIdRef.current = {
+ ...filteredLinksByNodeIdRef.current,
+ [n] : [
+ ...(filteredLinksByNodeIdRef.current[n] ?? []),
+ ...(additionalLinksFromDailies[n] ?? [])
+ ]
+ };
+ filteredLinks.push(...(additionalLinksFromDailies[n] ?? []))
+ })
+ }
+ // todo somewhere in here? transform a daiy to a link between all things in that daily?
const weightedLinks = filteredLinks.map((l) => {
const [target, source] = normalizeLinkEnds(l)
const link = l as OrgRoamLink