2020-06-04 15:07:14 +00:00
|
|
|
import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';
|
|
|
|
import {TaskStatusEnum} from '../../../../business-logic/model/tasks/taskStatusEnum';
|
|
|
|
import {TaskTypeEnum} from '../../../../business-logic/model/tasks/taskTypeEnum';
|
|
|
|
import {getSystemTags, isDevelopment} from '../../../../features/experiments/shared/experiments.utils';
|
|
|
|
import {Observable} from 'rxjs';
|
|
|
|
import {Store} from '@ngrx/store';
|
2021-01-18 14:30:25 +00:00
|
|
|
import {selectCompanyTags, selectProjectTags, selectTagsFilterByProject} from '../../../core/reducers/projects.reducer';
|
2020-06-04 15:07:14 +00:00
|
|
|
import {getTags} from '../../../core/actions/projects.actions';
|
|
|
|
import {addTag, removeTag} from '../../actions/common-experiments-menu.actions';
|
|
|
|
import {TagsMenuComponent} from '../../../shared/ui-components/tags/tags-menu/tags-menu.component';
|
|
|
|
import {MenuComponent} from '../../../shared/ui-components/panel/menu/menu.component';
|
2021-01-18 14:30:25 +00:00
|
|
|
import {ActivateEdit, DeactivateEdit} from '../../actions/common-experiments-info.actions';
|
|
|
|
import {EXPERIMENTS_STATUS_LABELS} from '../../../../features/experiments/shared/experiments.const';
|
2021-05-11 13:45:36 +00:00
|
|
|
import {EXPERIMENT_COMMENT} from '../experiment-general-info/experiment-general-info.component';
|
|
|
|
import {ActivatedRoute, Router} from '@angular/router';
|
|
|
|
import {
|
|
|
|
CountAvailableAndIsDisable,
|
|
|
|
MENU_ITEM_ID,
|
|
|
|
selectionDisabledAbort, selectionDisabledArchive,
|
|
|
|
selectionDisabledDelete, selectionDisabledDequeue, selectionDisabledEnqueue,
|
|
|
|
selectionDisabledMoveTo,
|
|
|
|
selectionDisabledPublishExperiments, selectionDisabledQueue,
|
|
|
|
selectionDisabledReset, selectionDisabledViewWorker
|
|
|
|
} from '../../../shared/entity-page/items.utils';
|
2020-06-04 15:07:14 +00:00
|
|
|
|
|
|
|
@Component({
|
2021-01-18 14:30:25 +00:00
|
|
|
selector: 'sm-experiment-info-header',
|
2020-06-04 15:07:14 +00:00
|
|
|
templateUrl: './experiment-info-header.component.html',
|
2021-01-18 14:30:25 +00:00
|
|
|
styleUrls: ['./experiment-info-header.component.scss']
|
2020-06-04 15:07:14 +00:00
|
|
|
})
|
|
|
|
export class ExperimentInfoHeaderComponent {
|
|
|
|
|
|
|
|
readonly TaskStatusEnum = TaskStatusEnum;
|
2021-01-18 14:30:25 +00:00
|
|
|
readonly TaskTypeEnum = TaskTypeEnum;
|
2020-06-04 15:07:14 +00:00
|
|
|
|
|
|
|
public viewId: boolean;
|
2021-01-18 14:30:25 +00:00
|
|
|
public tagsFilterByProject$: Observable<boolean>;
|
|
|
|
public projectTags$: Observable<string[]>;
|
|
|
|
public companyTags$: Observable<string[]>;
|
2020-06-04 15:07:14 +00:00
|
|
|
public isDev = false;
|
|
|
|
public systemTags = [] as string[];
|
2021-01-18 14:30:25 +00:00
|
|
|
public shared: boolean;
|
2021-05-11 13:45:36 +00:00
|
|
|
selectedDisableAvailable = {};
|
2020-06-04 15:07:14 +00:00
|
|
|
|
|
|
|
@Input() editable: boolean = true;
|
|
|
|
@Input() infoData;
|
2021-01-18 14:30:25 +00:00
|
|
|
@Input() backdropActive = false;
|
2020-06-04 15:07:14 +00:00
|
|
|
@Input() showMenu: boolean;
|
|
|
|
@Input() showMinimize: boolean;
|
2021-01-18 14:30:25 +00:00
|
|
|
@Input() isSharedAndNotOwner: boolean;
|
2020-06-04 15:07:14 +00:00
|
|
|
@Output() experimentNameChanged = new EventEmitter<string>();
|
|
|
|
@Output() minimizeClicked = new EventEmitter();
|
|
|
|
@ViewChild('tagMenu') tagMenu: MenuComponent;
|
|
|
|
@ViewChild('tagsMenuContent') tagMenuContent: TagsMenuComponent;
|
|
|
|
|
2021-05-11 13:45:36 +00:00
|
|
|
constructor(private store: Store<any>, private router: Router, private activatedRoute: ActivatedRoute) {
|
2021-01-18 14:30:25 +00:00
|
|
|
this.tagsFilterByProject$ = this.store.select(selectTagsFilterByProject);
|
|
|
|
this.projectTags$ = this.store.select(selectProjectTags);
|
|
|
|
this.companyTags$ = this.store.select(selectCompanyTags);
|
2020-06-04 15:07:14 +00:00
|
|
|
}
|
|
|
|
|
2021-05-11 13:45:36 +00:00
|
|
|
private _experiment: any;
|
2020-06-04 15:07:14 +00:00
|
|
|
get experiment() {
|
|
|
|
return this._experiment;
|
|
|
|
}
|
|
|
|
|
2021-05-11 13:45:36 +00:00
|
|
|
@Input() set experiment(experiment) {
|
|
|
|
if (experiment?.id !== this._experiment?.id) {
|
|
|
|
this.viewId = false;
|
|
|
|
}
|
2020-06-04 15:07:14 +00:00
|
|
|
this._experiment = experiment;
|
|
|
|
this.isDev = isDevelopment(experiment);
|
|
|
|
this.systemTags = getSystemTags(experiment);
|
2021-01-18 14:30:25 +00:00
|
|
|
this.shared = experiment?.system_tags?.includes('shared');
|
2021-05-11 13:45:36 +00:00
|
|
|
this.selectedDisableAvailable = {
|
|
|
|
[MENU_ITEM_ID.ABORT]: selectionDisabledAbort([experiment]),
|
|
|
|
[MENU_ITEM_ID.PUBLISH]: selectionDisabledPublishExperiments([experiment]),
|
|
|
|
[MENU_ITEM_ID.RESET]: selectionDisabledReset([experiment]),
|
|
|
|
[MENU_ITEM_ID.DELETE]: selectionDisabledDelete([experiment]),
|
|
|
|
[MENU_ITEM_ID.MOVE_TO]: selectionDisabledMoveTo([experiment]),
|
|
|
|
[MENU_ITEM_ID.ENQUEUE]: selectionDisabledEnqueue([experiment]),
|
|
|
|
[MENU_ITEM_ID.DEQUEUE]: selectionDisabledDequeue([experiment]),
|
|
|
|
[MENU_ITEM_ID.QUEUE]: selectionDisabledQueue([experiment]),
|
|
|
|
[MENU_ITEM_ID.VIEW_WORKER]: selectionDisabledViewWorker([experiment]),
|
|
|
|
[MENU_ITEM_ID.ARCHIVE]: selectionDisabledArchive([experiment])
|
|
|
|
};
|
2020-06-04 15:07:14 +00:00
|
|
|
}
|
|
|
|
|
2020-09-10 13:45:48 +00:00
|
|
|
|
2020-06-04 15:07:14 +00:00
|
|
|
onNameChanged(name) {
|
|
|
|
this.experimentNameChanged.emit(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
openTagMenu(event: MouseEvent) {
|
2020-09-10 13:45:48 +00:00
|
|
|
if (!this.tagMenu) {
|
|
|
|
return;
|
|
|
|
}
|
2021-01-18 14:30:25 +00:00
|
|
|
window.setTimeout(() => this.store.dispatch(new ActivateEdit('tags')), 200);
|
2020-06-04 15:07:14 +00:00
|
|
|
this.tagMenu.position = {x: event.clientX, y: event.clientY};
|
|
|
|
window.setTimeout(() => {
|
|
|
|
this.tagMenu.openMenu();
|
|
|
|
this.tagMenuContent.focus();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
addTag(tag: string) {
|
|
|
|
this.store.dispatch(addTag({tag, experiments: [this.experiment]}));
|
|
|
|
}
|
|
|
|
|
|
|
|
removeTag(tag: string) {
|
|
|
|
this.store.dispatch(removeTag({tag, experiments: [this.experiment]}));
|
|
|
|
}
|
|
|
|
|
|
|
|
tagsMenuClosed() {
|
2021-01-18 14:30:25 +00:00
|
|
|
this.store.dispatch(new DeactivateEdit());
|
2020-06-04 15:07:14 +00:00
|
|
|
this.tagMenuContent.clear();
|
|
|
|
}
|
2020-09-10 13:45:48 +00:00
|
|
|
|
|
|
|
editExperimentName(edit) {
|
|
|
|
if (edit) {
|
|
|
|
this.store.dispatch(new ActivateEdit('ExperimentName'));
|
|
|
|
} else {
|
|
|
|
this.store.dispatch(new DeactivateEdit());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
showID() {
|
|
|
|
this.viewId = true;
|
|
|
|
}
|
2021-01-18 14:30:25 +00:00
|
|
|
|
|
|
|
getStatusLabel() {
|
|
|
|
return EXPERIMENTS_STATUS_LABELS[this.experiment?.status] || '';
|
|
|
|
}
|
2021-05-11 13:45:36 +00:00
|
|
|
|
|
|
|
onDescriptionHandler() {
|
|
|
|
this.router.navigate(['general'], {relativeTo: this.activatedRoute});
|
|
|
|
this.store.dispatch(new ActivateEdit(EXPERIMENT_COMMENT));
|
|
|
|
}
|
2020-06-04 15:07:14 +00:00
|
|
|
}
|