remove graph visualization
This commit is contained in:
parent
3e692b65fe
commit
68f3643a5f
@ -1,115 +0,0 @@
|
|||||||
import React, {useState} from 'react';
|
|
||||||
// import cytoscape from 'cytoscape';
|
|
||||||
// import cola from 'cytoscape-cola';
|
|
||||||
import {useRouter} from 'next/router'
|
|
||||||
|
|
||||||
import CytoscapeComponent from "react-cytoscapejs";
|
|
||||||
|
|
||||||
|
|
||||||
const layout = {
|
|
||||||
name: 'circle',
|
|
||||||
fit: true, // whether to fit the viewport to the graph
|
|
||||||
padding: 32, // the padding on fit
|
|
||||||
boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
|
|
||||||
avoidOverlap: true, // prevents node overlap, may overflow boundingBox and radius if not enough space
|
|
||||||
nodeDimensionsIncludeLabels: false, // Excludes the label when calculating node bounding boxes for the layout algorithm
|
|
||||||
spacingFactor: 0.9, // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up
|
|
||||||
radius: 150, // the radius of the circle
|
|
||||||
startAngle: -2 / 4 * Math.PI, // where nodes start in radians
|
|
||||||
//sweep: undefined, // how many radians should be between the first and last node (defaults to full circle)
|
|
||||||
clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
|
|
||||||
sort: undefined, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
|
|
||||||
animate: false, // whether to transition the node positions
|
|
||||||
animationDuration: 500, // duration of animation in ms if enabled
|
|
||||||
animationEasing: undefined, // easing of animation if enabled
|
|
||||||
//animateFilter: function ( node, i ){ return true; }, // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts
|
|
||||||
ready: undefined, // callback on layoutready
|
|
||||||
stop: undefined, // callback on layoutstop
|
|
||||||
transform: function (node, position) {
|
|
||||||
return position;
|
|
||||||
} // transform a given node position. Useful for changing flow direction in discrete layouts
|
|
||||||
};
|
|
||||||
|
|
||||||
const styleSheet = [{
|
|
||||||
selector: "node",
|
|
||||||
style: {
|
|
||||||
"background-color": "#666",
|
|
||||||
"font-size": "12px",
|
|
||||||
"width": "20px",
|
|
||||||
"height": "20px",
|
|
||||||
"label":"data(label)"
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
selector: "label",
|
|
||||||
style: {"font-size": "12px"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
selector: 'edge',
|
|
||||||
style: {
|
|
||||||
'width': 2,
|
|
||||||
"height": 200,
|
|
||||||
'line-color': '#b2b2b2',
|
|
||||||
'target-arrow-color': '#ccc',
|
|
||||||
// 'target-arrow-shape': 'triangle',
|
|
||||||
'curve-style': 'straight'
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
|
|
||||||
function Graph({graph}) {
|
|
||||||
|
|
||||||
const [width, setWidth] = useState("300px");
|
|
||||||
const [height, setHeight] = useState("300px");
|
|
||||||
const [graphData, setGraphData] = useState({
|
|
||||||
nodes: graph.nodes,
|
|
||||||
edges: graph.edges
|
|
||||||
});
|
|
||||||
|
|
||||||
let myCyRef;
|
|
||||||
const router = useRouter()
|
|
||||||
//TODO: Listen to query change/ graphdata change to update state of this component
|
|
||||||
// Can use this: https://github.com/vercel/next.js/discussions/12661
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="right-bar-container">
|
|
||||||
<h3>Interactive Graph</h3>
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
border: "1px solid #ddd",
|
|
||||||
backgroundColor: "#f5f6fe",
|
|
||||||
borderRadius:"8px"
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<CytoscapeComponent
|
|
||||||
elements={CytoscapeComponent.normalizeElements(graphData)}
|
|
||||||
// pan={{ x: 200, y: 200 }}
|
|
||||||
style={{width: width, height: height}}
|
|
||||||
zoomingEnabled={true}
|
|
||||||
maxZoom={2}
|
|
||||||
minZoom={0.5}
|
|
||||||
autounselectify={false}
|
|
||||||
boxSelectionEnabled={true}
|
|
||||||
layout={layout}
|
|
||||||
stylesheet={styleSheet}
|
|
||||||
cy={cy => {
|
|
||||||
myCyRef = cy;
|
|
||||||
|
|
||||||
console.log("EVT", cy);
|
|
||||||
|
|
||||||
cy.on("tap", "node", evt => {
|
|
||||||
var node = evt.target;
|
|
||||||
let nodeData = node.data();
|
|
||||||
if (typeof nodeData.id === 'string') {
|
|
||||||
const path = '/note/' + node.data().id
|
|
||||||
router.push(path)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Graph;
|
|
@ -13,26 +13,20 @@ import MDContent from "../components/MDContent";
|
|||||||
|
|
||||||
|
|
||||||
// This trick is to dynamically load component that interact with window object (browser only)
|
// This trick is to dynamically load component that interact with window object (browser only)
|
||||||
const DynamicGraph = dynamic(
|
export default function Home({ graphData, content, tree, flattenNodes, backLinks }) {
|
||||||
() => import('../components/Graph'),
|
|
||||||
{ loading: () => <p>Loading ...</p>, ssr: false }
|
|
||||||
)
|
|
||||||
|
|
||||||
export default function Home({graphData, content, tree, flattenNodes, backLinks}) {
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<div className = 'container'>
|
<div className='container'>
|
||||||
<nav className="nav-bar">
|
<nav className="nav-bar">
|
||||||
<FolderTree tree={tree} flattenNodes={flattenNodes}/>
|
<FolderTree tree={tree} flattenNodes={flattenNodes} />
|
||||||
</nav>
|
</nav>
|
||||||
<MDContent content={content} handleOpenNewContent={null} backLinks={backLinks}/>
|
<MDContent content={content} handleOpenNewContent={null} backLinks={backLinks} />
|
||||||
<DynamicGraph graph={graphData}/>
|
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
const {nodes, edges} = constructGraphData()
|
const { nodes, edges } = constructGraphData()
|
||||||
|
|
||||||
export function getStaticProps() {
|
export function getStaticProps() {
|
||||||
const tree = convertObject(getDirectoryData());
|
const tree = convertObject(getDirectoryData());
|
||||||
@ -48,7 +42,7 @@ export function getStaticProps() {
|
|||||||
content: contentData.data,
|
content: contentData.data,
|
||||||
tree: tree,
|
tree: tree,
|
||||||
flattenNodes: flattenNodes,
|
flattenNodes: flattenNodes,
|
||||||
graphData:graphData,
|
graphData: graphData,
|
||||||
backLinks: backLinks
|
backLinks: backLinks
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -8,28 +8,22 @@ import {
|
|||||||
constructGraphData, getLocalGraphData
|
constructGraphData, getLocalGraphData
|
||||||
} from "../../lib/utils";
|
} from "../../lib/utils";
|
||||||
import FolderTree from "../../components/FolderTree";
|
import FolderTree from "../../components/FolderTree";
|
||||||
import {getFlattenArray} from "../../lib/utils";
|
import { getFlattenArray } from "../../lib/utils";
|
||||||
import MDContent from "../../components/MDContent";
|
import MDContent from "../../components/MDContent";
|
||||||
import dynamic from 'next/dynamic'
|
|
||||||
|
|
||||||
const DynamicGraph = dynamic(
|
|
||||||
() => import('../../components/Graph'),
|
|
||||||
{ loading: () => <p>Loading ...</p>, ssr: false }
|
|
||||||
)
|
|
||||||
|
|
||||||
export default function Home({note, backLinks, fileNames, tree, flattenNodes, graphData}) {
|
export default function Home({ note, backLinks, fileNames, tree, flattenNodes, graphData }) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<Head>
|
<Head>
|
||||||
{note.title && <meta name="title" content={note.title}/>}
|
{note.title && <meta name="title" content={note.title} />}
|
||||||
</Head>
|
</Head>
|
||||||
<div className='container'>
|
<div className='container'>
|
||||||
<nav className="nav-bar">
|
<nav className="nav-bar">
|
||||||
<FolderTree tree={tree} flattenNodes={flattenNodes}/>
|
<FolderTree tree={tree} flattenNodes={flattenNodes} />
|
||||||
</nav>
|
</nav>
|
||||||
<MDContent content={note.data} fileNames={fileNames} handleOpenNewContent={null} backLinks={backLinks}/>
|
<MDContent content={note.data} fileNames={fileNames} handleOpenNewContent={null} backLinks={backLinks} />
|
||||||
<DynamicGraph graph={graphData}/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</Layout>
|
</Layout>
|
||||||
@ -38,7 +32,7 @@ export default function Home({note, backLinks, fileNames, tree, flattenNodes, gr
|
|||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const allPostsData = getAllSlugs();
|
const allPostsData = getAllSlugs();
|
||||||
const paths = allPostsData.map(p => ({params: {id: p}}))
|
const paths = allPostsData.map(p => ({ params: { id: p } }))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
paths,
|
paths,
|
||||||
@ -46,9 +40,9 @@ export async function getStaticPaths() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const {nodes, edges} = constructGraphData()
|
const { nodes, edges } = constructGraphData()
|
||||||
|
|
||||||
export function getStaticProps({params}) {
|
export function getStaticProps({ params }) {
|
||||||
const note = getSinglePost(params.id);
|
const note = getSinglePost(params.id);
|
||||||
const tree = convertObject(getDirectoryData());
|
const tree = convertObject(getDirectoryData());
|
||||||
const flattenNodes = getFlattenArray(tree)
|
const flattenNodes = getFlattenArray(tree)
|
||||||
|
Loading…
Reference in New Issue
Block a user