From 6bdbee1271b9ae3c2bbe2c00b5e47380721a7342 Mon Sep 17 00:00:00 2001 From: Vargha Csongor Date: Sun, 5 May 2024 12:21:27 +0200 Subject: [PATCH] Add person menu --- .../src/lib/family_tree/PersonMenu.svelte | 41 ++++++++++ .../src/lib/family_tree/PersonNode.svelte | 3 +- .../src/lib/family_tree/setFamilyTreeNodes.ts | 40 ++++++++++ frontend/src/routes/+page.svelte | 75 ++++++++----------- 4 files changed, 116 insertions(+), 43 deletions(-) create mode 100644 frontend/src/lib/family_tree/PersonMenu.svelte create mode 100644 frontend/src/lib/family_tree/setFamilyTreeNodes.ts diff --git a/frontend/src/lib/family_tree/PersonMenu.svelte b/frontend/src/lib/family_tree/PersonMenu.svelte new file mode 100644 index 0000000..9d99dbd --- /dev/null +++ b/frontend/src/lib/family_tree/PersonMenu.svelte @@ -0,0 +1,41 @@ + + +
+

+ node: {id} +

+ + + +
+ + diff --git a/frontend/src/lib/family_tree/PersonNode.svelte b/frontend/src/lib/family_tree/PersonNode.svelte index b8f7ee9..eed65ce 100644 --- a/frontend/src/lib/family_tree/PersonNode.svelte +++ b/frontend/src/lib/family_tree/PersonNode.svelte @@ -37,9 +37,10 @@

- {data.Lastname} + {data.Firstname} {data.Middlename} + {data.Lastname}

diff --git a/frontend/src/lib/family_tree/setFamilyTreeNodes.ts b/frontend/src/lib/family_tree/setFamilyTreeNodes.ts new file mode 100644 index 0000000..643fdee --- /dev/null +++ b/frontend/src/lib/family_tree/setFamilyTreeNodes.ts @@ -0,0 +1,40 @@ +import { fetch_family_tree } from '$lib/family_tree/getFamilyTree'; +import { getLayoutedElements } from '$lib/family_tree/dagreLayout'; +import { AddToNodesData, AddToEdgesData } from '$lib/family_tree/dataAdapter'; +import type { Node, Edge } from '@xyflow/svelte'; +import { useEdges, useNodes } from '@xyflow/svelte'; + +const nodes = useNodes(); +const edges = useEdges(); + +export function setFamilyTreeNodes() { + console.log('fetching nodes'); + fetch_family_tree().then((data) => { + let nodes_data: Node[] = []; + function pushNodeToData(node: Node) { + nodes_data.push(node); + } + + AddToNodesData(data, 0, pushNodeToData); + AddToNodesData(data, 2, pushNodeToData); + AddToNodesData(data, 4, pushNodeToData); + AddToNodesData(data, 6, pushNodeToData); + AddToNodesData(data, 8, pushNodeToData); + + let edges_data: Edge[] = []; + function pushEdgeToData(edge: Edge) { + edges_data.push(edge); + } + + AddToEdgesData(data, 1, pushEdgeToData); + AddToEdgesData(data, 3, pushEdgeToData); + AddToEdgesData(data, 5, pushEdgeToData); + AddToEdgesData(data, 7, pushEdgeToData); + + const layoutedElements = getLayoutedElements(nodes_data, edges_data, 'TB'); + + $nodes = layoutedElements.nodes; + $edges = layoutedElements.edges; + }); + console.log('nodes fetched and set'); +} diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index d31396c..060813a 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -5,52 +5,20 @@ import type { Node, Edge, NodeTypes } from '@xyflow/svelte'; import { isAuthenticated } from '../lib/stores'; import PersonNode from './../lib/family_tree/PersonNode.svelte'; + import { setFamilyTreeNodes } from '../lib/family_tree/setFamilyTreeNodes'; import { login } from '../lib/auth'; - import { fetch_family_tree } from '$lib/family_tree/getFamilyTree'; - import { getLayoutedElements } from '$lib/family_tree/dagreLayout'; - import { AddToNodesData, AddToEdgesData } from '$lib/family_tree/dataAdapter'; - let edges_data: { - id: string; - source: string; - target: string; - data: { type: string; verified: boolean }; - }[] = []; + + import PersonMenu from '$lib/family_tree/PersonMenu.svelte'; + import PersonPanel from '$lib/family_tree/PersonPanel.svelte'; const nodes = writable([]); const edges = writable([]); onMount(() => { if (!$isAuthenticated) { - console.log('user authenticated:', $isAuthenticated); + console.log('user is not authenticated'); login(); } else { - console.log('user authenticated:', $isAuthenticated); - console.log('fetching nodes'); - fetch_family_tree().then((data) => { - let nodes_data: Node[] = []; - function pushNodeToData(node: Node) { - nodes_data.push(node); - } - - AddToNodesData(data, 0, pushNodeToData); - AddToNodesData(data, 2, pushNodeToData); - AddToNodesData(data, 4, pushNodeToData); - AddToNodesData(data, 6, pushNodeToData); - AddToNodesData(data, 8, pushNodeToData); - - let edges_data: Edge[] = []; - function pushEdgeToData(edge: Edge) { - edges_data.push(edge); - } - - AddToEdgesData(data, 1, pushEdgeToData); - AddToEdgesData(data, 3, pushEdgeToData); - AddToEdgesData(data, 5, pushEdgeToData); - AddToEdgesData(data, 7, pushEdgeToData); - - const layoutedElements = getLayoutedElements(nodes_data, edges_data, 'TB'); - - $nodes = layoutedElements.nodes; - $edges = layoutedElements.edges; - }); + console.log('user is authenticated'); + setFamilyTreeNodes(); } }); @@ -58,6 +26,8 @@ custom: PersonNode }; + let personPanel: {} | null; + let menu: { id: string; top?: number; left?: number; right?: number; bottom?: number } | null; let width: number; let height: number; @@ -69,7 +39,7 @@ // Calculate position of the context menu. We want to make sure it // doesn't get positioned off-screen. menu = { - id: node.id, + id: node.data.ID, top: event.clientY < height - 200 ? event.clientY : undefined, left: event.clientX < width - 200 ? event.clientX : undefined, right: event.clientX >= width - 200 ? width - event.clientX : undefined, @@ -85,9 +55,30 @@
- + - + + {#if menu} + + {/if} +