Start to test family-chart module
This commit is contained in:
227
geneit_app/src/widgets/complex_family_tree/ComplexFamilyTree.jsx
Normal file
227
geneit_app/src/widgets/complex_family_tree/ComplexFamilyTree.jsx
Normal file
@ -0,0 +1,227 @@
|
||||
import React from "react";
|
||||
import f3 from "family-chart";
|
||||
import "./family-chart.css";
|
||||
|
||||
export default class ComlexFamilyTree extends React.Component {
|
||||
cont = React.createRef();
|
||||
|
||||
componentDidMount() {
|
||||
if (!this.cont.current) return;
|
||||
|
||||
const store = f3.createStore({
|
||||
data: data(),
|
||||
node_separation: 250,
|
||||
level_separation: 150,
|
||||
}),
|
||||
view = f3.d3AnimationView({
|
||||
store,
|
||||
cont: document.querySelector("#FamilyChart"),
|
||||
}),
|
||||
Card = f3.elements.Card({
|
||||
store,
|
||||
svg: view.svg,
|
||||
card_dim: {
|
||||
w: 220,
|
||||
h: 70,
|
||||
text_x: 75,
|
||||
text_y: 15,
|
||||
img_w: 60,
|
||||
img_h: 60,
|
||||
img_x: 5,
|
||||
img_y: 5,
|
||||
},
|
||||
card_display: [
|
||||
(d) => `${d.data["first name"] || ""} ${d.data["last name"] || ""}`,
|
||||
(d) => `${d.data["birthday"] || ""}`,
|
||||
],
|
||||
mini_tree: true,
|
||||
link_break: false,
|
||||
});
|
||||
|
||||
view.setCard(Card);
|
||||
store.setOnUpdate((props) => view.update(props || {}));
|
||||
store.update.tree({ initial: true });
|
||||
|
||||
function data() {
|
||||
return [
|
||||
{
|
||||
id: "0",
|
||||
rels: {
|
||||
spouses: ["8c92765f-92d3-4120-90dd-85a28302504c"],
|
||||
father: "0c09cfa0-5e7c-4073-8beb-94f6c69ada19",
|
||||
mother: "0fa5c6bc-5b58-40f5-a07e-d787e26d8b56",
|
||||
children: [
|
||||
"ce2fcb9a-6058-4326-b56a-aced35168561",
|
||||
"f626d086-e2d6-4722-b4f3-ca4f15b109ab",
|
||||
],
|
||||
},
|
||||
data: {
|
||||
"first name": "Agnus",
|
||||
"last name": "",
|
||||
birthday: "1970",
|
||||
avatar:
|
||||
"https://static8.depositphotos.com/1009634/988/v/950/depositphotos_9883921-stock-illustration-no-user-profile-picture.jpg",
|
||||
gender: "M",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "8c92765f-92d3-4120-90dd-85a28302504c",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Andrea",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
spouses: ["0"],
|
||||
children: [
|
||||
"ce2fcb9a-6058-4326-b56a-aced35168561",
|
||||
"f626d086-e2d6-4722-b4f3-ca4f15b109ab",
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "0c09cfa0-5e7c-4073-8beb-94f6c69ada19",
|
||||
data: {
|
||||
gender: "M",
|
||||
"first name": "Zen",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
children: ["0"],
|
||||
spouses: ["0fa5c6bc-5b58-40f5-a07e-d787e26d8b56"],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "0fa5c6bc-5b58-40f5-a07e-d787e26d8b56",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Zebra",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
spouses: ["0c09cfa0-5e7c-4073-8beb-94f6c69ada19"],
|
||||
children: ["0"],
|
||||
father: "12a9bddf-855a-4583-a695-c73fa8c0e9b2",
|
||||
mother: "bd56a527-b613-474d-9f38-fcac0aae218b",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "ce2fcb9a-6058-4326-b56a-aced35168561",
|
||||
data: {
|
||||
gender: "M",
|
||||
"first name": "Ben",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
mother: "8c92765f-92d3-4120-90dd-85a28302504c",
|
||||
father: "0",
|
||||
spouses: ["b4e33c68-20a7-47ba-9dcc-1168a07d5b52"],
|
||||
children: [
|
||||
"eabd40c9-4518-4485-af5e-e4bc3ffd27fb",
|
||||
"240a3f71-c921-42d7-8a13-dec5e1acc4fd",
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "f626d086-e2d6-4722-b4f3-ca4f15b109ab",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Becky",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
mother: "8c92765f-92d3-4120-90dd-85a28302504c",
|
||||
father: "0",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "eabd40c9-4518-4485-af5e-e4bc3ffd27fb",
|
||||
data: {
|
||||
gender: "M",
|
||||
"first name": "Carlos",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
mother: "b4e33c68-20a7-47ba-9dcc-1168a07d5b52",
|
||||
father: "ce2fcb9a-6058-4326-b56a-aced35168561",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "b4e33c68-20a7-47ba-9dcc-1168a07d5b52",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Branka",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
spouses: ["ce2fcb9a-6058-4326-b56a-aced35168561"],
|
||||
children: [
|
||||
"eabd40c9-4518-4485-af5e-e4bc3ffd27fb",
|
||||
"240a3f71-c921-42d7-8a13-dec5e1acc4fd",
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "240a3f71-c921-42d7-8a13-dec5e1acc4fd",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Carla",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
mother: "b4e33c68-20a7-47ba-9dcc-1168a07d5b52",
|
||||
father: "ce2fcb9a-6058-4326-b56a-aced35168561",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "12a9bddf-855a-4583-a695-c73fa8c0e9b2",
|
||||
data: {
|
||||
gender: "M",
|
||||
"first name": "Yvo",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
children: ["0fa5c6bc-5b58-40f5-a07e-d787e26d8b56"],
|
||||
spouses: ["bd56a527-b613-474d-9f38-fcac0aae218b"],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "bd56a527-b613-474d-9f38-fcac0aae218b",
|
||||
data: {
|
||||
gender: "F",
|
||||
"first name": "Yva",
|
||||
"last name": "",
|
||||
birthday: "",
|
||||
avatar: "",
|
||||
},
|
||||
rels: {
|
||||
spouses: ["12a9bddf-855a-4583-a695-c73fa8c0e9b2"],
|
||||
children: ["0fa5c6bc-5b58-40f5-a07e-d787e26d8b56"],
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return <div className="f3" id="FamilyChart" ref={this.cont}></div>;
|
||||
}
|
||||
}
|
97
geneit_app/src/widgets/complex_family_tree/family-chart.css
Normal file
97
geneit_app/src/widgets/complex_family_tree/family-chart.css
Normal file
@ -0,0 +1,97 @@
|
||||
.f3 {
|
||||
height: 700px;
|
||||
max-height: calc(100vh - 80px);
|
||||
width: 900px;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.f3 .cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
.f3 svg.main_svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #3b5560;
|
||||
color: #3b5560;
|
||||
}
|
||||
.f3 svg.main_svg text {
|
||||
fill: currentColor;
|
||||
}
|
||||
.f3 rect.card-female,
|
||||
.f3 .card-female .card-body-rect,
|
||||
.f3 .card-female .text-overflow-mask {
|
||||
fill: lightpink;
|
||||
}
|
||||
.f3 rect.card-male,
|
||||
.f3 .card-male .card-body-rect,
|
||||
.f3 .card-male .text-overflow-mask {
|
||||
fill: lightblue;
|
||||
}
|
||||
.f3 .card-genderless .card-body-rect,
|
||||
.f3 .card-genderless .text-overflow-mask {
|
||||
fill: lightgray;
|
||||
}
|
||||
.f3 .card_add .card-body-rect {
|
||||
fill: #3b5560;
|
||||
stroke-width: 4px;
|
||||
stroke: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
.f3 g.card_add text {
|
||||
fill: #fff;
|
||||
}
|
||||
.f3 .card-main {
|
||||
stroke: #000;
|
||||
}
|
||||
.f3 .card_family_tree rect {
|
||||
transition: 0.3s;
|
||||
}
|
||||
.f3 .card_family_tree:hover rect {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
.f3 .card_add_relative {
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.f3 .card_add_relative circle {
|
||||
fill: rgba(0, 0, 0, 0);
|
||||
}
|
||||
.f3 .card_add_relative:hover {
|
||||
color: black;
|
||||
}
|
||||
.f3 .card_edit.pencil_icon {
|
||||
color: #fff;
|
||||
transition: 0.3s;
|
||||
}
|
||||
.f3 .card_edit.pencil_icon:hover {
|
||||
color: black;
|
||||
}
|
||||
.f3 .card_break_link,
|
||||
.f3 .link_upper,
|
||||
.f3 .link_lower,
|
||||
.f3 .link_particles {
|
||||
transform-origin: 50% 50%;
|
||||
transition: 1s;
|
||||
}
|
||||
.f3 .card_break_link {
|
||||
color: #fff;
|
||||
}
|
||||
.f3 .card_break_link.closed .link_upper {
|
||||
transform: translate(-140.5px, 655.6px);
|
||||
}
|
||||
.f3 .card_break_link.closed .link_upper g {
|
||||
transform: rotate(-58deg);
|
||||
}
|
||||
.f3 .card_break_link.closed .link_particles {
|
||||
transform: scale(0);
|
||||
}
|
||||
.f3 .input-field input {
|
||||
height: 2.5rem !important;
|
||||
}
|
||||
.f3 .input-field > label:not(.label-icon).active {
|
||||
-webkit-transform: translateY(-8px) scale(0.8);
|
||||
transform: translateY(-8px) scale(0.8);
|
||||
}
|
Reference in New Issue
Block a user