import React, { useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { TouchableOpacity, View, ViewStyle } from 'react-native' import { Screen, Text } from '../../components' // import { useNavigation } from "@react-navigation/native" // import { useStores } from "../../models" import { color } from '../../theme' import { Graph } from '../../components' import { Tweaks } from '../../components' import genRandomTree from '../../data/randomdata' import AsyncStorage from '@react-native-async-storage/async-storage' import axios from 'axios' import rando from '../../data/rando.json' const ROOT: ViewStyle = { backgroundColor: color.palette.black, flex: 1, } import { LocalButton } from '../../components/' import { GraphUi } from '../../components/graph-ui/graph-ui' import { Switch } from 'react-native-elements' export const GraphScreen = observer(function GraphScreen() { // Pull in one of our MST stores // const { someStore, anotherStore } = useStores() // Pull in navigation via hook // const navigation = useNavigation() const [physics, setPhysics] = useState({}) const [graphData, setGraphData] = useState() const [nodeIds, setNodeIds] = useState([]) // { "nodes": [{ "id": 1 }, { "id": 2 }], "links": [{ "target": 1, "source": 2 }] }); const physicsInit = { charge: -350, collision: true, linkStrength: 0.1, linkIts: 1, particles: 2, linkOpacity: 0.4, linkWidth: 1, particleWidth: 4, nodeRel: 4, labels: true, labelScale: 1.5, alphaDecay: 0.16, alphaTarget: 0, velocityDecay: 0.25, gravity: 0.5, gravityOn: true, hover: true, colorful: true, galaxy: true, rootId: 0, } const getData = async () => { try { const value: string = await AsyncStorage.getItem('@physics') if (value !== null) { const valueJson = JSON.parse(value) if (Object.keys(valueJson).length === Object.keys(physicsInit).length) { valueJson.local = false return valueJson } else { return physicsInit } } else { return physicsInit } } catch (e) { console.log(e) } } const storeData = async (value) => { try { let jsonVal = JSON.stringify(value) console.log(jsonVal + ' ' + value) await AsyncStorage.setItem('@physics', jsonVal) } catch (e) { console.log(e) } } // hook to save the current configuration of the physics tweaks // after it is updated useEffect(() => { if (timer) { clearTimeout(timer) } // set timer so the thing doesn't run every single slider tick const timer = setTimeout(() => { storeData(physics) }, 1000) return () => clearTimeout(timer) }, [physics]) //"ComponentOnMount" // Get previous settings and the data from the org-roam-server const sanitizeGraph = (data) => { const cleanLinks = [] data.links.forEach((link, j) => { let target let source for (let i = 0; i < data.nodes.length; i++) { let a = data.nodes[i] !a.neighbors && (a.neighbors = []) !a.links && (a.links = []) // the first time around, // index the node as not a part of the local graph !j && (a.local = false) if (link.target === data.nodes[i].id) { a.links.push(link) target = [a, i] link.target === link.source ? null : cleanLinks.push(link) } else if (link.source === data.nodes[i].id) { a.links.push(link) source = [a, i] } } if (target && source) { data.nodes[target[1]].neighbors.push(source[0]) data.nodes[source[1]].neighbors.push(target[0]) link.sourceIndex = source[1] link.targetIndex = target[1] link.index = [j] link.local = false } }) data.links = cleanLinks return data } const [theme, setTheme] = useState({ base1: '#1c1f24', base2: '#21272d', base3: '#23272e', base4: '#484854', base5: '#62686E', base6: '#757B80', base7: '#9ca0a4', base8: '#DFDFDF', bg: '#242730', 'bg-alt': '#2a2e38', blue: '#51afef', cyan: '#5cEfFF', 'dark-blue': '#1f5582', 'dark-cyan': '#6A8FBF', fg: '#bbc2cf', 'fg-alt': '#5D656B', green: '#7bc275', grey: '#484854', magenta: '#C57BDB', orange: '#e69055', red: '#ff665c', teal: '#4db5bd', violet: '#a991f1', yellow: '#FCCE7B', }) useEffect(() => { getData().then((data) => setPhysics(data)) axios .get('http://localhost:35901/theme') .then((theme) => { setTheme(theme.data) console.log(theme.data) }) .catch((e) => { console.log('No theme found') }) axios .get('http://localhost:35901/graph') .then((dataa) => { let cleanData = sanitizeGraph(dataa.data) console.log(cleanData) setGraphData(cleanData) }) .catch((e) => { console.log(e) console.log("Couldn't get data.") //setGraphData(rando); }) }, []) const [threeDim, setThreeDim] = useState(false) const [local, setLocal] = useState(false) if (!graphData) { return null } else { return ( { setThreeDim(!threeDim) }} /> ) } })