Skip to content

Commit f519eb3

Browse files
Ticket #105 : Add UI components
1 parent b9da0dd commit f519eb3

26 files changed

Lines changed: 418 additions & 290 deletions

logos/header.svg

Lines changed: 53 additions & 0 deletions
Loading

src/CaseManagement.Website/angularApp/app/humantasks/humantasks.module.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ import { ViewHumanTaskDefInfoComponent } from './viewdef/info/info.component';
1919
import { ViewTaskPeopleAssignmentComponent } from './viewdef/peopleassignment/view-peopleassignment.component';
2020
import { ViewPresentationParametersComponent } from './viewdef/presentationparameters/view-presentationparameters.component';
2121
import { ColumnComponent } from './viewdef/rendering/components/column/column.component';
22+
import { ContainerComponent } from './viewdef/rendering/components/container/container.component';
2223
import { DynamicComponent } from './viewdef/rendering/components/dynamic.component';
23-
import { RowComponent } from './viewdef/rendering/components/row/row.component';
24+
import { HeaderComponent, HeaderComponentDialog } from './viewdef/rendering/components/header/header.component';
25+
import { RowComponent, RowComponentDialog } from './viewdef/rendering/components/row/row.component';
26+
import { SelectComponent, SelectComponentDialog } from './viewdef/rendering/components/select/select.component';
27+
import { TxtComponent, TxtComponentDialog } from './viewdef/rendering/components/txt/txt.component';
2428
import { ViewHumanTaskDefRenderingComponent } from './viewdef/rendering/rendering.component';
2529
import { ViewHumanTaskDef } from './viewdef/view.component';
26-
import { TxtComponent } from './viewdef/rendering/components/txt/txt.component';
27-
import { SelectComponent } from './viewdef/rendering/components/select/select.component';
2830

2931
@NgModule({
3032
imports: [
@@ -38,16 +40,23 @@ import { SelectComponent } from './viewdef/rendering/components/select/select.co
3840
CreateHumanTaskInstanceDialog,
3941
AddEscalationDialog,
4042
EditEscalationDialog,
43+
RowComponentDialog,
44+
TxtComponentDialog,
45+
SelectComponentDialog,
46+
HeaderComponentDialog,
4147
RowComponent,
4248
ColumnComponent,
4349
TxtComponent,
44-
SelectComponent
50+
SelectComponent,
51+
HeaderComponent,
52+
ContainerComponent
4553
],
4654
declarations: [
4755
AddHumanTaskDefDialog,
4856
CreateHumanTaskInstanceDialog,
4957
AddEscalationDialog,
5058
EditEscalationDialog,
59+
SelectComponentDialog,
5160
HumanTasksComponent,
5261
ListHumanTaskFilesComponent,
5362
ViewHumanTaskDef,
@@ -59,12 +68,17 @@ import { SelectComponent } from './viewdef/rendering/components/select/select.co
5968
ViewHumanTaskDefDeadlinesComponent,
6069
ViewHumanTaskDefRenderingComponent,
6170
PeopleAssignmentComponent,
71+
RowComponentDialog,
72+
TxtComponentDialog,
73+
HeaderComponentDialog,
6274
PresentationParameterComponent,
6375
DynamicComponent,
6476
ColumnComponent,
6577
SelectComponent,
6678
RowComponent,
6779
TxtComponent,
80+
HeaderComponent,
81+
ContainerComponent,
6882
TranslateFieldPipe
6983
],
7084
providers: [ TranslateFieldPipe ]

src/CaseManagement.Website/angularApp/app/humantasks/viewdef/rendering/components/baseui.component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
export class BaseUIComponent {
44
option: any;
55
parent: ViewContainerRef;
6+
openDialog() {
7+
8+
}
69
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<dynamic-component [option]="option" *ngFor="let option of option.children"></dynamic-component>
1+
<dynamic-component [option]="opt" [parentOption]="option" *ngFor="let opt of option.children"></dynamic-component>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<dynamic-component [parentOption]="option" [option]="opt" *ngFor="let opt of option.children"></dynamic-component>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
:host {
2+
display: contents !important;
3+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Component, OnInit } from "@angular/core";
2+
import { BaseUIComponent } from "../baseui.component";
3+
4+
@Component({
5+
selector: 'view-container',
6+
templateUrl: 'container.component.html',
7+
styleUrls: ['./container.component.scss']
8+
})
9+
export class ContainerComponent extends BaseUIComponent implements OnInit {
10+
ngOnInit() {
11+
12+
}
13+
}

src/CaseManagement.Website/angularApp/app/humantasks/viewdef/rendering/components/dynamic.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
{{ title }}
44
</div>
55
<ul class='toolbar'>
6-
<li class='settings'>
6+
<li class='settings' (click)="openSettings($event)">
77
<svg xmlns='http://www.w3.org/2000/svg' enable-background='new 0 0 24 24' viewBox='0 0 24 24' fill='white' width='18px' height='18px'><g><path d='M0,0h24v24H0V0z' fill='none' /><path d='M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z' /></g></svg>
88
</li>
9-
<li class='remove'>
9+
<li *ngIf="parentOption" class='remove' (click)="remove($event)">
1010
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='18px' height='18px'><path d='M0 0h24v24H0z' fill='none' /><path d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z' /></svg>
1111
</li>
1212
</ul>

src/CaseManagement.Website/angularApp/app/humantasks/viewdef/rendering/components/dynamic.component.ts

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { Component, ComponentFactoryResolver, ComponentRef, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from "@angular/core";
2+
import { BaseUIComponent } from "./baseui.component";
23
import { ColumnComponent } from "./column/column.component";
4+
import { ContainerComponent } from "./container/container.component";
35
import { RowComponent } from "./row/row.component";
4-
import { TxtComponent } from "./txt/txt.component";
5-
import { BaseUIComponent } from "./baseui.component";
66
import { SelectComponent } from "./select/select.component";
7+
import { TxtComponent } from "./txt/txt.component";
8+
import { HeaderComponent } from "./header/header.component";
79

810
@Component({
911
selector: 'dynamic-component',
@@ -12,27 +14,21 @@ import { SelectComponent } from "./select/select.component";
1214

1315
})
1416
export class DynamicComponent implements OnInit, OnDestroy {
15-
private _option: any;
1617
private componentRef: ComponentRef<{}>;
1718
private _dic: any = {
1819
'row': RowComponent,
1920
'column': ColumnComponent,
2021
'txt': TxtComponent,
21-
'select': SelectComponent
22+
'select': SelectComponent,
23+
'container': ContainerComponent,
24+
'header': HeaderComponent
2225
};
2326
@ViewChild('container', { read: ViewContainerRef }) container: ViewContainerRef;
2427
@ViewChild('parent', { read: ViewContainerRef }) parent: ViewContainerRef;
25-
@Input()
26-
get option() {
27-
return this._option;
28-
}
29-
set option(v: any) {
30-
if (!v) {
31-
return;
32-
}
28+
baseUIComponent: BaseUIComponent = null;
29+
@Input() option: any = null;
30+
@Input() parentOption: any = null;
3331

34-
this._option = v;
35-
}
3632
isSelected: boolean = false;
3733
title: string = null;
3834

@@ -68,6 +64,35 @@ export class DynamicComponent implements OnInit, OnDestroy {
6864
this.option.children.push(json);
6965
}
7066

67+
openSettings(evt: any) {
68+
evt.preventDefault();
69+
evt.stopPropagation();
70+
if (!this.baseUIComponent) {
71+
return;
72+
}
73+
74+
this.baseUIComponent.openDialog();
75+
}
76+
77+
remove(evt: any) {
78+
evt.preventDefault();
79+
evt.stopPropagation();
80+
if (!this.baseUIComponent || !this.parentOption || !this.parentOption.children) {
81+
return;
82+
}
83+
84+
const self = this;
85+
const filtered = this.parentOption.children.filter((r: any) => {
86+
return self.baseUIComponent.option.id === r.id;
87+
});
88+
if (filtered.length !== 1) {
89+
return;
90+
}
91+
92+
const index = this.parentOption.children.indexOf(filtered[0]);
93+
this.parentOption.children.splice(index, 1);
94+
}
95+
7196
private refresh() {
7297
if (!this.option || !this.option.type) {
7398
return;
@@ -76,9 +101,9 @@ export class DynamicComponent implements OnInit, OnDestroy {
76101
const type = this._dic[this.option.type];
77102
const factory = this.compFactoryResolver.resolveComponentFactory(type);
78103
this.componentRef = this.container.createComponent(factory);
79-
const instance = this.componentRef.instance as BaseUIComponent;
80-
instance.option = this.option;
81-
instance.parent = this.parent;
104+
this.baseUIComponent = this.componentRef.instance as BaseUIComponent;
105+
this.baseUIComponent .option = this.option;
106+
this.baseUIComponent .parent = this.parent;
82107
this.title = this.option.type;
83108
}
84109
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div [class]="option.class">{{ option.txt }}</div>

0 commit comments

Comments
 (0)