diff --git a/src/app/_dialogs/delete-workflow-spec-dialog/delete-workflow-spec-dialog.component.html b/src/app/_dialogs/delete-workflow-spec-dialog/delete-workflow-spec-dialog.component.html
index de54c9f..6d74c5e 100644
--- a/src/app/_dialogs/delete-workflow-spec-dialog/delete-workflow-spec-dialog.component.html
+++ b/src/app/_dialogs/delete-workflow-spec-dialog/delete-workflow-spec-dialog.component.html
@@ -1,5 +1,5 @@
diff --git a/src/app/_dialogs/workflow-spec-category-dialog/workflow-spec-category-dialog.component.ts b/src/app/_dialogs/workflow-spec-category-dialog/workflow-spec-category-dialog.component.ts
index 7b98244..85dfdef 100644
--- a/src/app/_dialogs/workflow-spec-category-dialog/workflow-spec-category-dialog.component.ts
+++ b/src/app/_dialogs/workflow-spec-category-dialog/workflow-spec-category-dialog.component.ts
@@ -25,18 +25,7 @@ export class WorkflowSpecCategoryDialogComponent {
placeholder: 'ID of workflow spec category',
required: true,
},
- },
- {
- key: 'name',
- type: 'input',
- defaultValue: this.data.name,
- templateOptions: {
- label: 'Name',
- placeholder: 'Name of workflow spec category',
- description: 'Enter a name, in lowercase letters, separated by underscores, that is easy for you to remember.' +
- 'It will be converted to all_lowercase_with_underscores when you save.',
- required: true,
- },
+ hideExpression: true,
},
{
key: 'display_name',
diff --git a/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.spec.ts b/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.spec.ts
index 30a9a8b..685245a 100644
--- a/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.spec.ts
+++ b/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.spec.ts
@@ -11,7 +11,13 @@ import {Router} from '@angular/router';
import {RouterTestingModule} from '@angular/router/testing';
import {FormlyModule} from '@ngx-formly/core';
import {FormlyMaterialModule} from '@ngx-formly/material';
-import {ApiService, MockEnvironment, mockWorkflowSpec0, mockWorkflowSpecCategories} from 'sartography-workflow-lib';
+import {
+ ApiService,
+ MockEnvironment,
+ mockWorkflowSpec0,
+ mockWorkflowSpecCategories,
+ mockWorkflowSpecs
+} from 'sartography-workflow-lib';
import {WorkflowSpecDialogData} from '../../_interfaces/dialog-data';
import {WorkflowSpecDialogComponent} from './workflow-spec-dialog.component';
@@ -74,6 +80,12 @@ describe('WorkflowSpecDialogComponent', () => {
expect(catReq.request.method).toEqual('GET');
catReq.flush(mockWorkflowSpecCategories);
expect(component.categories.length).toBeGreaterThan(0);
+
+ const specReq = httpMock.expectOne('apiRoot/workflow-specification');
+ expect(specReq.request.method).toEqual('GET');
+ specReq.flush(mockWorkflowSpecs);
+ expect(component.specs.length).toBeGreaterThan(0);
+
});
afterEach(() => {
diff --git a/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.ts b/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.ts
index b6ed230..1369002 100644
--- a/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.ts
+++ b/src/app/_dialogs/workflow-spec-dialog/workflow-spec-dialog.component.ts
@@ -1,22 +1,26 @@
import {Component, Inject} from '@angular/core';
-import {FormGroup} from '@angular/forms';
+import {FormControl, FormGroup, ValidationErrors} from '@angular/forms';
import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
import {FormlyFieldConfig, FormlyFormOptions, FormlyTemplateOptions} from '@ngx-formly/core';
import {ApiService, toSnakeCase} from 'sartography-workflow-lib';
import {v4 as uuidv4} from 'uuid';
import {WorkflowSpecDialogData} from '../../_interfaces/dialog-data';
+import {of} from "rxjs";
+
@Component({
selector: 'app-workflow-spec-dialog',
templateUrl: './workflow-spec-dialog.component.html',
styleUrls: ['./workflow-spec-dialog.component.scss']
})
+
export class WorkflowSpecDialogComponent {
form: FormGroup = new FormGroup({});
model: any = {};
options: FormlyFormOptions = {};
fields: FormlyFieldConfig[] = [];
categories: any;
+ specs: any;
constructor(
private api: ApiService,
@@ -29,29 +33,29 @@ export class WorkflowSpecDialogComponent {
label: c.display_name,
}));
+ this.api.getWorkflowSpecList().subscribe(wfs => {
+ this.specs = wfs.map(w => w.id);
+
this.fields = [
{
key: 'id',
type: 'input',
- defaultValue: this.data.id || uuidv4(),
+ defaultValue: this.data.id,
templateOptions: {
- label: 'ID',
- placeholder: 'UUID of workflow specification',
- description: 'This is an autogenerated unique ID and is not editable.',
- required: true,
- disabled: true,
- },
- },
- {
- key: 'name',
- type: 'input',
- defaultValue: this.data.name,
- templateOptions: {
- label: 'Name',
+ label: 'id',
placeholder: 'Name of workflow specification',
- description: 'Enter a name, in lowercase letters, separated by underscores, that is easy for you to remember.' +
+ description: 'Enter a name to identify this spec. It cannot be changed later.' +
'It will be converted to all_lowercase_with_underscores when you save.',
required: true,
+ disabled: this.data.id !== '',
+ },
+ asyncValidators: {
+ uniqueID: {
+ expression: (control: FormControl) => {
+ return of(this.specs.indexOf(control.value) === -1);
+ },
+ message: 'This ID name is already taken.',
+ },
},
},
{
@@ -110,6 +114,7 @@ export class WorkflowSpecDialogComponent {
},
];
});
+ });
}
onNoClick() {
diff --git a/src/app/_interfaces/dialog-data.ts b/src/app/_interfaces/dialog-data.ts
index d5aed86..4af9296 100644
--- a/src/app/_interfaces/dialog-data.ts
+++ b/src/app/_interfaces/dialog-data.ts
@@ -20,7 +20,6 @@ export interface OpenFileDialogData {
export interface WorkflowSpecDialogData {
id: string;
- name: string;
display_name: string;
description: string;
category_id: number;
@@ -31,7 +30,6 @@ export interface WorkflowSpecDialogData {
export interface WorkflowSpecCategoryDialogData {
id: number;
- name: string;
display_name: string;
display_order?: number;
admin: boolean;
diff --git a/src/app/modeler/modeler.component.html b/src/app/modeler/modeler.component.html
index e4fffd4..152c747 100644
--- a/src/app/modeler/modeler.component.html
+++ b/src/app/modeler/modeler.component.html
@@ -5,7 +5,7 @@
Back
{{workflowSpec.display_name}}
- ({{workflowSpec.name}})
+ ({{workflowSpec.id}})