Angular organogram
Angular organogram working example on codesandbox.
Component installation
npm i @jsuites/organogram
Organogram component
organogram.component.ts
import {
AfterViewInit,
Component,
ElementRef,
Input,
ViewChild
} from "@angular/core";
@Component({
selector: "app-organogram",
templateUrl: "./organogram.component.html",
styleUrls: ["./organogram.component.css"]
})
export class OrganogramComponent implements AfterViewInit {
@Input()
properties: Object;
@ViewChild("organogram") organogram: ElementRef;
ngAfterViewInit() {
organogram(this.organogram.nativeElement, this.properties);
}
}
Component state
app.component.ts
import { Component } from "@angular/core";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
handleOrganogramClick = (el, obj, event) => {
console.log(event.target);
};
}
Component template
organogram.component.html
<div #organogram></div>
Importing the component
app.module.ts
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { AppComponent } from "./app.component";
import { OrganogramComponent } from "./organogram/organogram.component";
@NgModule({
declarations: [AppComponent, OrganogramComponent],
imports: [BrowserModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Component usage
app.component.html
<app-organogram
[properties]="{
width: 600,
height: 480,
onclick: handleOrganogramClick,
data: [
{
id: 1,
name: 'Jorge',
role: 'CEO',
parent: 0,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 2,
name: 'Antonio',
role: 'Vice president',
parent: 1,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 3,
name: 'Manoel',
role: 'Production manager',
parent: 1,
status: '#D3D3D3',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 4,
name: 'Pedro',
role: 'Intern',
parent: 3,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 5,
name: 'Carlos',
role: 'Intern',
parent: 3,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 6,
name: 'Marcos',
role: 'Marketing manager',
parent: 2,
status: '#D3D3D3',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 7,
name: 'Ana',
role: 'Sales manager',
parent: 2,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 8,
name: 'Nicolly',
role: 'Operations manager',
parent: 2,
status: '#D3D3D3',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 9,
name: 'Paulo',
role: 'Sales assistant',
parent: 7,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
},
{
id: 10,
name: 'Iris',
role: 'Sales assistant',
parent: 7,
status: '#90EE90',
img: 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'
}
],
vertical: false
}"
></app-organogram>
NOTE: Make sure to import the organogram.js and organogram.css in your angular.json or angular-cli.json
"styles": ["styles.css", "node_modules/@jsuites/organogram/organogram.css"], "scripts": ["node_modules/@jsuites/organogram/organogram.js"]