diff --git a/frontend/src/app/view/view-data/view-data.component.html b/frontend/src/app/view/view-data/view-data.component.html deleted file mode 100644 index 72c7b48..0000000 --- a/frontend/src/app/view/view-data/view-data.component.html +++ /dev/null @@ -1,8 +0,0 @@ -
- -
- {{ post.author }} - {{ post.message }} -
- - diff --git a/frontend/src/app/view/view-data/view-data.component.scss b/frontend/src/app/view/view-data/view-data.component.scss deleted file mode 100644 index 9d69745..0000000 --- a/frontend/src/app/view/view-data/view-data.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -::ng-deep .link { - fill: none; - stroke: #000; - stroke-width: 2px; -} diff --git a/frontend/src/app/view/view-data/view-data.component.spec.ts b/frontend/src/app/view/view-data/view-data.component.spec.ts deleted file mode 100644 index af72be1..0000000 --- a/frontend/src/app/view/view-data/view-data.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ViewDataComponent } from './view-data.component'; - -describe('ViewDataComponent', () => { - let component: ViewDataComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ ViewDataComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(ViewDataComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/src/app/view/view-data/view-data.component.ts b/frontend/src/app/view/view-data/view-data.component.ts deleted file mode 100644 index ae2bfee..0000000 --- a/frontend/src/app/view/view-data/view-data.component.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { - Component, - OnInit, - ViewChild, - ElementRef, - AfterViewInit, -} from '@angular/core'; -import { Router } from '@angular/router'; -import * as Papa from 'papaparse'; -import * as d3 from 'd3'; - -/* TODO: move this to separated files */ - -interface ForumData { - id: string; - name: string; - discussions: Array; -} - -interface Discussion { - title: string; - id: string; - first_post: string; - posts: Array; -} - -interface Post { - author: string; - id: string; - message: string; - parent: string; - children?: Post[] | null; -} - -@Component({ - selector: 'app-view-data', - templateUrl: './view-data.component.html', - styleUrls: ['./view-data.component.scss'], -}) -export class ViewDataComponent implements OnInit, AfterViewInit { - @ViewChild('tree', { read: ElementRef }) - private treeContainer: ElementRef; - - data: ForumData; - temp: Array; - names: Array<{ id: string; name: string }>; - - constructor(private router: Router) { - const fetch = JSON.parse( - this.router.getCurrentNavigation()?.extras.state?.data - ); - this.data = fetch as ForumData; - this.temp = this.data.discussions[0].posts as Post[]; - } - - parsedData = (file: any): Promise<{ id: string; name: string }[]> => { - return new Promise((resolve, _) => { - Papa.parse(file, { - header: true, - skipEmptyLines: true, - complete: (result) => { - resolve(result.data as { id: string; name: string }[]); - }, - }); - }); - }; - - async parseFile(e: any) { - let tempNames: Array<{ id: string; name: string }>; - - const file = e.target.files[0]; - tempNames = await this.parsedData(file); - - this.temp = this.temp.map((item) => { - const index = tempNames.findIndex((data) => data.id === item.author); - item.author = index !== -1 ? tempNames[index].name : item.author; - return item; - }); - } - - makeHierarchy(): void { - const posts = this.data.discussions[0].posts; - const tree: Array = []; - const childOf = {} as any; - posts.forEach((item) => { - const { id, parent } = item; - childOf[id] = childOf[id] || []; - item.children = childOf[id]; - if (parent !== '0') { - (childOf[parent] = childOf[parent] || []).push(item); - } else { - tree.push(item); - } - }); - - const margin = { top: 50, right: 90, bottom: 30, left: 90 }; - const width = 660 - margin.left - margin.right; - const height = 500 - margin.top - margin.bottom; - - const treemap = d3.tree().size([width, height]); - const nodes = d3.hierarchy(tree[0]); - treemap(nodes); - - const element = this.treeContainer.nativeElement; - - const tooltip = d3 - .select(element) - .append('div') - .attr('class', 'tooltip') - .style('position', 'absolute') - .style('opacity', 0); - - const svg = d3 - .select(element) - .append('svg') - .attr('width', width + margin.left + margin.right) - .attr('height', height + margin.top + margin.bottom); - - const group = svg - .append('g') - .attr(`transform`, `translate(${margin.left},${margin.top})`); - - const gLink = group.append('g').attr('class', 'links'); - const gNode = group.append('g').attr('class', 'nodes'); - const node = gNode.selectAll('g.nodes').data(nodes.descendants()); - const nodeEnter = node.enter().append('g').classed('node', true); - - gLink - .selectAll('g.links') - .data(nodes.links()) - .enter() - .append('line') - .classed('link', true) - .attr('x1', (d: any) => d.source.x) - .attr('y1', (d: any) => d.source.y) - .attr('x2', (d: any) => d.target.x) - .attr('y2', (d: any) => d.target.y); - - nodeEnter - .append('circle') - .attr('cx', (d: any) => d.x) - .attr('cy', (d: any) => d.y) - .attr('r', 25) - .style('fill', '#fff') - .style('stroke', '#ccc') - .on('mouseover', (d) => { - tooltip.transition().duration(400).style('opacity', 1); - tooltip - .html(`Wiadomość:
${d.data.message}`) - .style('width', '15rem') - .style('background-color', '#fff') - .style('border', '1px solid black') - .style('left', `${d3.event.pageX + 40}px`) - .style('top', `${d3.event.pageY - 10}px`); - }) - .on('mouseout', function (d) { - tooltip.transition().duration(400).style('opacity', 0); - }); - - nodeEnter - .append('text') - .attr('x', (d: any) => d.x) - .attr('y', (d: any) => d.y) - .attr('text-anchor', 'middle') - .text((d: any) => d.data.id); - } - - ngAfterViewInit(): void { - this.makeHierarchy(); - } - - ngOnInit(): void {} -} diff --git a/frontend/src/app/view/view.module.ts b/frontend/src/app/view/view.module.ts deleted file mode 100644 index c761031..0000000 --- a/frontend/src/app/view/view.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { ViewDataComponent } from './view-data/view-data.component'; - -import { NbLayoutModule, NbCardModule, NbTreeGridModule } from '@nebular/theme'; - -@NgModule({ - declarations: [ViewDataComponent], - imports: [CommonModule, NbLayoutModule, NbCardModule, NbTreeGridModule], - exports: [ViewDataComponent], -}) -export class ViewModule {}