React
This document shows you haw you can create an FamilyTree JS React project.
Creating a local React project.
-
Create a new project:
Go to the project root folder:npx create-react-app familytreecd familytree -
Create file mytree.js in the src folder with the following content:
import React, { Component } from 'react'; export default class Tree extends Component { constructor(props) { super(props); this.divRef = React.createRef(); } shouldComponentUpdate() { return false; } componentDidMount() { this.family = new FamilyTree (this.divRef.current , { nodes: this.props.nodes, nodeBinding: { field_0: 'name', img_0: 'img' } }); } render() { return ( <div id="tree" ref={this.divRef}></div> ); } } -
Install the FamilyTree JS:
Downloaded package installation:- Add the extracted familytree.js in your project \src\ folder.
-
In your mytree.js file add this reference:
import FamilyTree from "./familytree.js"; -
If you use TypeScript you need to add this in the end of both files (.js and .d.ts ):
and copy the .d.ts file in the same folder tooexport default FamilyTree
Warning!
May not work for the licensed version.
In your mytree.js file add this reference:npm i @balkangraph/familytree.jsimport FamilyTree from "@balkangraph/familytree.js";
-
Change app.js as follows:
import React, { Component } from 'react'; import FamilyTree from './mytree'; export default class App extends Component { render() { return ( <div style={{height: '100%'}}> <FamilyTree nodes={[ { id: 1, pids: [2], name: 'Amber McKenzie', gender: 'female', img: 'https://cdn.balkan.app/shared/2.jpg' }, { id: 2, pids: [1], name: 'Ava Field', gender: 'male', img: 'https://cdn.balkan.app/shared/m30/5.jpg' }, { id: 3, mid: 1, fid: 2, name: 'Peter Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/2.jpg' }, { id: 4, mid: 1, fid: 2, name: 'Savin Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/1.jpg' }, { id: 5, mid: 1, fid: 2, name: 'Emma Stevens', gender: 'female', img: 'https://cdn.balkan.app/shared/w10/3.jpg' } ]} /> </div> ); } } -
Start the project:
npm start
Using online references:
-
Create an HTML file with an app element and add the online references of react, react-dom, babel and FamilyTree JS:
<html> <body> <div id="app"></div> <script src="https://unpkg.com/react@17/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> <script src="https://balkan.app/js/FamilyTree.js"></script> </body> </html> -
Add the div element and the javascript:
<div id="tree"></div> <script type="text/jsx"> const app = document.getElementById('app') function Familytree(props) { var family = new FamilyTree(document.getElementById("tree"), { nodeBinding: props.nodeBinding, nodes: props.nodes }); return (null) } var data = [ { id: 1, pids: [2], name: 'Amber McKenzie', gender: 'female', img: 'https://cdn.balkan.app/shared/2.jpg' }, { id: 2, pids: [1], name: 'Ava Field', gender: 'male', img: 'https://cdn.balkan.app/shared/m30/5.jpg' }, { id: 3, mid: 1, fid: 2, name: 'Peter Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/2.jpg' }, { id: 4, mid: 1, fid: 2, name: 'Savin Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/1.jpg' }, { id: 5, mid: 1, fid: 2, name: 'Emma Stevens', gender: 'female', img: 'https://cdn.balkan.app/shared/w10/3.jpg' } ] var nodeBinding = { field_0: "name", img_0: "img" } ReactDOM.render(<Familytree nodes = {data} nodeBinding = {nodeBinding} />, app) </script>
Next.js:
-
Create a new file called package.json with an empty object {}.
{ } -
Install Next.js:
You'll get something like this in package.json:npm install react react-dom next{ "dependencies": { "next": "^12.1.0", "react": "^17.0.2", "react-dom": "^17.0.2" } } -
Add a script in package.json to run the Next.js development server while you develop:
"scripts": { "dev": "next dev" }, -
Install the FamilyTree JS NPM package:
npm i @balkangraph/familytree.js -
Create a pages folder and an index.js file in it with the following content:
import FamilyTree from '@balkangraph/familytree.js'; function Familytree(props) { if (typeof window === 'object') { var family = new FamilyTree(document.getElementById("tree"), { nodeBinding: props.nodeBinding, nodes: props.nodes }); } return (null) } var data = [ { id: 1, pids: [2], name: 'Amber McKenzie', gender: 'female', img: 'https://cdn.balkan.app/shared/2.jpg' }, { id: 2, pids: [1], name: 'Ava Field', gender: 'male', img: 'https://cdn.balkan.app/shared/m30/5.jpg' }, { id: 3, mid: 1, fid: 2, name: 'Peter Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/2.jpg' }, { id: 4, mid: 1, fid: 2, name: 'Savin Stevens', gender: 'male', img: 'https://cdn.balkan.app/shared/m10/1.jpg' }, { id: 5, mid: 1, fid: 2, name: 'Emma Stevens', gender: 'female', img: 'https://cdn.balkan.app/shared/w10/3.jpg' } ] var nodeBinding = { field_0: "name", img_0: "img" } export default function HomePage() { return ( <div> <div id="tree"></div> <Familytree nodes={data} nodeBinding={nodeBinding} /> </div> ) } -
Install next-transpile-modules
npm install --save next-transpile-modules -
Create next.config.js file in the root folder with the following content:
const withTM = require('next-transpile-modules')(['@balkangraph/familytree.js']); // pass the modules you would like to see transpiled module.exports = withTM(); -
run the project
npm run dev