diff --git a/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.html b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.html new file mode 100644 index 0000000000000000000000000000000000000000..e5f8aa371a7affe17d01c96a802f15f11f4c65b0 --- /dev/null +++ b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.html @@ -0,0 +1,20 @@ + +<div id="worker-content"> + + +<div id="header"> + <span>Laufend # {{getNumberInQueue()}}</span> + <button id="btn_hide" (click)="close()">X</button> +</div> + + + + + <div mat-dialog-content> + <div *ngFor="let task of taskQueue"> + <span>{{ task.room.name }}, # {{ task.comments.length }}</span> + </div> + </div> + +</div> + diff --git a/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.scss b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..7c09c71f08550de8a07ea1b0f1cf12336de58e6d --- /dev/null +++ b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.scss @@ -0,0 +1,16 @@ +button { + position: absolute!important; + right: 0; + top: 0; +} + +::ng-deep.mat-dialog-container { + padding: 0 !important; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, .2), 0 1px 1px 0 rgba(0, 0, 0, .14), 0 1px 3px 0 rgba(0, 0, 0, .12), -4px 0 0 0 var(--primary); + overflow: hidden!important; + position: relative!important; +} + +#worker-content { + padding-left: 5px; +} diff --git a/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.spec.ts b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..723a4dc56c840a1e7c3921cabb8b4c76e1c6611c --- /dev/null +++ b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WorkerDialogComponent } from './worker-dialog.component'; + +describe('WorkerDialogComponent', () => { + let component: WorkerDialogComponent; + let fixture: ComponentFixture<WorkerDialogComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ WorkerDialogComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(WorkerDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.ts b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..da60a9bed92e511ad1ca2be8f0b46668939744dc --- /dev/null +++ b/src/app/components/shared/_dialogs/worker-dialog/worker-dialog.component.ts @@ -0,0 +1,98 @@ +import {Component, Inject, OnInit} from '@angular/core'; +import {MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {Room} from "../../../../models/room"; +import {CommentService} from "../../../../services/http/comment.service"; +import { Comment } from '../../../../models/comment'; +import {SpacyService} from "../../../../services/http/spacy.service"; +import {TSMap} from "typescript-map"; +export interface WorkTask { + room: Room, + comments: Comment[] +} + +@Component({ + selector: 'app-worker-dialog', + templateUrl: './worker-dialog.component.html', + styleUrls: ['./worker-dialog.component.scss'] +}) +export class WorkerDialogComponent implements OnInit { + + isRunning: boolean = false; + taskQueue: WorkTask[] = []; + closeCallback: any = null; + constructor(private commentService: CommentService, + private spacyService: SpacyService) {} + + ngOnInit(): void {} + + _callNextInQueue(): void { + if (!this.isQueueEmpty()) { + this.isRunning = true; + const task = this.taskQueue[0]; + this.runWorkTask(task); + } else { + this.isRunning = false; + setTimeout(()=> this.close(), 2000); + } + } + + addWorkTask(room: Room): void { + if (this.taskQueue.find((t: WorkTask) => t.room.id === room.id)) { + return; + } + + this.commentService.getAckComments(room.id).subscribe((comments: Comment[]) => { + const task: WorkTask = {room: room, comments: comments}; + + // TEST + //for (let i = 0 ; i < 5 ; i++) { + this.taskQueue.push(task); + //} + + if (!this.isRunning) { + this._callNextInQueue(); + } + }) + } + + runWorkTask(task: WorkTask): void { + + task.comments.forEach((c: Comment) => { + const model = 'de'; + const text = c.body; + this.spacyService.getKeywords(text, model).subscribe((keywords: string[]) => { + const changes = new TSMap<string, string>(); + changes.set('keywordsFromSpacy', JSON.stringify(keywords)); + this.taskQueue = this.taskQueue.slice(1, this.taskQueue.length); + + // TEST: + // this._callNextInQueue(); + this.commentService.patchComment(c, changes).subscribe(rt => { + console.log('PATCHED .........................'); + this._callNextInQueue(); + }); + + }) + }) + } + + getNumberInQueue() { + return this.taskQueue.length; + } + + isQueueEmpty(): boolean { + return this.taskQueue.length === 0; + } + + close(): void { + if (this.closeCallback) { + this.closeCallback(); + } + } + + getCloseCallback(callback: () => void): void { + this.closeCallback = callback; + } + +} + diff --git a/src/app/components/shared/header/header.component.html b/src/app/components/shared/header/header.component.html index d9537f9fbdd2b85e007feb6d143d01a42339938e..b8d3a9fae9085ed89cf7c650890b102610b4f155 100644 --- a/src/app/components/shared/header/header.component.html +++ b/src/app/components/shared/header/header.component.html @@ -163,6 +163,16 @@ <span>{{'header.tag-cloud' | translate}}</span> </button> + + <button mat-menu-item + tabindex="0" + (click)="startWorkerDialog()"> + <mat-icon>cloud + </mat-icon> + <span>Enter keywords from spaCy</span> + </button> + + </ng-container> <ng-container *ngIf="router.url.includes('/participant/room/')"> </ng-container> diff --git a/src/app/components/shared/header/header.component.ts b/src/app/components/shared/header/header.component.ts index c3842163ab6ec31498753ccb4abf41f0ae106357..6a4ec043d45356e934ef93d2f23b8517ea6faaa2 100644 --- a/src/app/components/shared/header/header.component.ts +++ b/src/app/components/shared/header/header.component.ts @@ -6,7 +6,7 @@ import { User } from '../../../models/user'; import { UserRole } from '../../../models/user-roles.enum'; import { Location } from '@angular/common'; import { TranslateService } from '@ngx-translate/core'; -import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import {_MatDialogBase, MAT_DIALOG_DEFAULT_OPTIONS, MatDialog, MatDialogRef} from '@angular/material/dialog'; import { LoginComponent } from '../login/login.component'; import { DeleteAccountComponent } from '../_dialogs/delete-account/delete-account.component'; import { UserService } from '../../../services/http/user.service'; @@ -24,6 +24,7 @@ import { TopicCloudFilterComponent } from '../_dialogs/topic-cloud-filter/topic- import { RoomService } from '../../../services/http/room.service'; import { Room } from '../../../models/room'; import { TagCloudMetaData } from '../../../services/util/tag-cloud-data.service'; +import {WorkerDialogComponent} from "../_dialogs/worker-dialog/worker-dialog.component"; @Component({ selector: 'app-header', @@ -42,6 +43,7 @@ export class HeaderComponent implements OnInit { commentsCountQuestions = 0; commentsCountUsers = 0; commentsCountKeywords = 0; + workerDialogRef: MatDialogRef<WorkerDialogComponent, null> = null; constructor(public location: Location, private authenticationService: AuthenticationService, @@ -322,4 +324,33 @@ export class HeaderComponent implements OnInit { this.roomService.updateRoom(this.room).subscribe(r => this.room = r); } + public startWorkerDialog() { + + if (this.workerDialogRef == null) { + + this.workerDialogRef = this.dialog.open(WorkerDialogComponent, { + width: '200px', + disableClose: true, + autoFocus: false, + position: {left: '50px', bottom: '50px'}, + role: 'dialog', + hasBackdrop: false, + closeOnNavigation: false + }); + + const component: WorkerDialogComponent = this.workerDialogRef.componentInstance; + component.getCloseCallback(() => { + this.workerDialogRef.close(); + this.workerDialogRef = null; + }) + component.addWorkTask(this.room); + } else { + const component: WorkerDialogComponent = this.workerDialogRef.componentInstance; + component.addWorkTask(this.room); + } + + } + + + } diff --git a/src/app/components/shared/shared.module.ts b/src/app/components/shared/shared.module.ts index 9e1fa76e707e4fe232456bbe490910b5f1b96b51..f022dfac582d8515332e41d4450ead18c6e6db9a 100644 --- a/src/app/components/shared/shared.module.ts +++ b/src/app/components/shared/shared.module.ts @@ -37,19 +37,22 @@ import { TopicDialogCommentComponent } from './dialog/topic-dialog-comment/topic import { TopicCloudFilterComponent } from './_dialogs/topic-cloud-filter/topic-cloud-filter.component'; import { SpacyDialogComponent } from './_dialogs/spacy-dialog/spacy-dialog.component'; import { TagCloudPopUpComponent } from './tag-cloud/tag-cloud-pop-up/tag-cloud-pop-up.component'; +import { WorkerDialogComponent } from './_dialogs/worker-dialog/worker-dialog.component'; +import {DragDropModule} from "@angular/cdk/drag-drop"; @NgModule({ - imports: [ - CommonModule, - EssentialsModule, - SharedRoutingModule, - MatRippleModule, - ArsModule, - MarkdownModule, - QRCodeModule, - TagCloudModule, - ColorPickerModule - ], + imports: [ + CommonModule, + EssentialsModule, + SharedRoutingModule, + MatRippleModule, + ArsModule, + MarkdownModule, + QRCodeModule, + TagCloudModule, + ColorPickerModule, + DragDropModule + ], declarations: [ RoomJoinComponent, PageNotFoundComponent, @@ -79,7 +82,8 @@ import { TagCloudPopUpComponent } from './tag-cloud/tag-cloud-pop-up/tag-cloud-p TopicDialogCommentComponent, TopicCloudFilterComponent, SpacyDialogComponent, - TagCloudPopUpComponent + TagCloudPopUpComponent, + WorkerDialogComponent ], exports: [ RoomJoinComponent,