diff --git a/demo-shell-ng2/app/components/activiti/activiti-demo.component.css b/demo-shell-ng2/app/components/activiti/activiti-demo.component.css
index 9cfc4f8ef6..15e60cbd0a 100644
--- a/demo-shell-ng2/app/components/activiti/activiti-demo.component.css
+++ b/demo-shell-ng2/app/components/activiti/activiti-demo.component.css
@@ -21,7 +21,7 @@
margin-bottom: 5px;
}
-.adf-no-form-container {
+.adf-no-form-container {
text-align: center;
font-weight: 600;
font-size: 18px;
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html
index 68656ab4fd..031188f3b4 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/amount/amount.widget.html
@@ -14,5 +14,6 @@
placeholder="{{field.placeholder}}">
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss
index 14bd6c150b..9dd1bc46de 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.scss
@@ -56,7 +56,7 @@
}
.mat-input-placeholder {
- top: 2.5em !important;
+ top: 2.2em !important;
}
.mat-focused {
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/group-user.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/group-user.model.ts
index 5dd668f5c7..b9f4cf9238 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/core/group-user.model.ts
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/group-user.model.ts
@@ -24,6 +24,7 @@ export class GroupUserModel {
firstName: string;
id: string;
lastName: string;
+ userImageUrl: string;
constructor(json?: any) {
if (json) {
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html
index 59a273bd75..b028442d30 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/date/date.widget.html
@@ -14,6 +14,7 @@
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html
index 19aed4e37b..70b1cc190a 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html
@@ -11,4 +11,5 @@
[id]="opt.id">{{opt.name}}
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss
index 73202bcb93..a6b74ca2e0 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.scss
@@ -11,4 +11,8 @@
width: 100%;
}
+ &-dropdown-required-message .adf-error-text-container{
+ margin-top: -2px !important;
+ }
+
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html
index 5f3da680bc..57a7bf02f6 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/dynamic-table.widget.html
@@ -62,4 +62,5 @@
(cancel)="onCancelChanges()">
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html
index 5022255d8f..abfc26a064 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.html
@@ -3,4 +3,7 @@
{{error}}
warning
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.scss b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.scss
index de1bd2e830..3874a65ef4 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.scss
@@ -1,3 +1,5 @@
.adf-error-text-container {
- margin-top: 0 !important;
+ margin-top: -16px !important;
+ position: inherit;
+ width: 100%;
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts
index fa7b5c3c27..b8450d22e5 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/error/error.component.ts
@@ -18,7 +18,7 @@
/* tslint:disable:component-selector */
import { animate, state, style, transition, trigger } from '@angular/animations';
-import { AfterViewInit, Component, Input, ViewEncapsulation } from '@angular/core';
+import { AfterViewInit, Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';
import { FormService } from './../../../services/form.service';
import { baseHost , WidgetComponent } from './../widget.component';
@@ -38,11 +38,14 @@ import { baseHost , WidgetComponent } from './../widget.component';
host: baseHost,
encapsulation: ViewEncapsulation.None
})
-export class ErrorWidgetComponent extends WidgetComponent implements AfterViewInit {
+export class ErrorWidgetComponent extends WidgetComponent implements AfterViewInit, OnChanges {
@Input()
error: string;
+ @Input()
+ required: string;
+
_subscriptAnimationState: string = '';
constructor(public formService: FormService) {
@@ -53,4 +56,11 @@ export class ErrorWidgetComponent extends WidgetComponent implements AfterViewIn
this._subscriptAnimationState = 'enter';
}
+ ngOnChanges(changes: SimpleChanges) {
+ if (changes['required']) {
+ this.required = changes.required.currentValue;
+ this._subscriptAnimationState = 'enter';
+ }
+ }
+
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html
index c87b29fb90..08974468a0 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.html
@@ -1,6 +1,6 @@
+ [class.adf-invalid]="!field.isValid" [class.adf-readonly]="field.readOnly" id="functional-group-div" *ngIf="field.isVisible">
+
- 0">
+
- {{item.name}}}
+ {{item.name}}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss
index ff944b5c45..f292ae036f 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/functional-group/functional-group.widget.scss
@@ -9,13 +9,14 @@
&-group-autocomplete {
background-color: #fff;
- position:absolute;
+ position: inherit;
max-height: 200px;
overflow-y: auto;
z-index: 5;
+ width: 100%;
color: #555;
margin: -15px 0 0 0;
- > ul {
+ > md-option {
list-style-type: none;
position: static;
height: auto;
@@ -25,7 +26,7 @@
margin: 0;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
border-radius: 2px;
- > li {
+ > span {
opacity: 1;
}
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.html
index de000556c3..c6ef1c38df 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.html
@@ -6,6 +6,7 @@
md-autosize
type="text"
rows="3"
+ [maxlength]="field.maxLength"
[id]="field.id"
[required]="isRequired()"
[(ngModel)]="field.value"
@@ -14,6 +15,10 @@
placeholder="{{field.placeholder}}">
+
0" class="adf-multiline-word-counter">
+ {{field?.value?.length || 0}}/{{field.maxLength}}
+
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.scss
index 07427925b4..4e266a0c45 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/multiline-text/multiline-text.widget.scss
@@ -7,4 +7,21 @@
width: 100%;
}
+ &-multiline-word-counter {
+ float: right;
+ margin-top: -20px !important;
+ min-height: 24px;
+ min-width: 1px;
+ font-size: 12px;
+ line-height: 14px;
+ overflow: hidden;
+ transition: all .3s cubic-bezier(.55,0,.55,.2);
+ opacity: 1;
+ margin-top: 0;
+ padding-top: 5px;
+ text-align: right;
+ padding-right: 2px;
+ padding-left: 0;
+ }
+
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/number/number.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/number/number.widget.html
index 1d1cbe0c3e..5903ee83a9 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/number/number.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/number/number.widget.html
@@ -15,4 +15,5 @@
placeholder="{{field.placeholder}}">
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.html
index ca59553257..7aeb79f552 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.html
@@ -1,13 +1,13 @@
+ [class.adf-invalid]="!field.isValid" [class.adf-readonly]="field.readOnly" id="people-widget-content" *ngIf="field.isVisible">
+
- 0">
-
- {{getDisplayName(item)}}
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.scss
index 379d3f3e45..d18e6ed7e2 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.scss
@@ -9,25 +9,58 @@
&-people-autocomplete {
background-color: #fff;
- position:absolute;
+ position:inherit;
max-height: 200px;
+ width: 100%;
overflow-y: auto;
z-index: 5;
color: #555;
margin: -15px 0 0 0;
- > ul {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ > md-option {
list-style-type: none;
position: static;
height: auto;
width: auto;
min-width: 124px;
- padding: 8px 0;
+ padding: 8px 0 0 20px;
margin: 0;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
border-radius: 2px;
- > li {
+ > span {
opacity: 1;
}
}
}
+
+ &-people-widget-pic {
+ background: #ff9800;
+ display: inline-block;
+ width: 30px;
+ padding: 0px 9px;
+ border-radius: 100px;
+ color: #fff;
+ text-align: center;
+ font-weight: bolder;
+ font-size: 18px;
+ font-family: Muli;
+ text-transform: uppercase;
+ vertical-align: middle;
+ }
+
+ &-people-widget-row {
+ padding: 5px 5px;
+ }
+
+ &-people-widget-image {
+ border-radius: 100px;
+ width: 50px;
+ height: 50px;
+ vertical-align: middle;
+ display: inline-block;
+ padding: 0px 0px;
+ }
+
+ &-people-widget-image-row {
+ display: inline-block;
+ }
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.ts
index c3e1290cba..69995a824f 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.ts
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/people/people.widget.ts
@@ -85,12 +85,18 @@ export class PeopleWidgetComponent extends WidgetComponent implements OnInit {
}, 200);
}
+ onErrorImageLoad(user) {
+ if (user.userImage) {
+ user.userImage = null;
+ }
+ }
+
flushValue() {
this.popupVisible = false;
let option = this.users.find(item => {
let fullName = this.getDisplayName(item).toLocaleLowerCase();
- return fullName === this.value.toLocaleLowerCase();
+ return (this.value && fullName === this.value.toLocaleLowerCase());
});
if (option) {
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html
index 41bd247429..28cfad62aa 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html
@@ -17,4 +17,7 @@
+
+
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/text/text.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/text/text.widget.html
index 7cfe89c3e5..428f035477 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/text/text.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/text/text.widget.html
@@ -15,4 +15,5 @@
placeholder="{{field.placeholder}}">
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html
index dcda4fff84..74f852ef29 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.html
@@ -1,23 +1,26 @@
-
-
-
-
-
-
-
- 0 && popupVisible">
-
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.scss b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.scss
index f18b5a554c..d9880652eb 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.scss
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.scss
@@ -3,6 +3,11 @@
.adf {
+ &-typeahead-widget-container {
+ position: relative;
+ display: block;
+ }
+
&-typeahead-widget {
width: 100%;
}
@@ -11,11 +16,13 @@
background-color: #fff;
position:absolute;
max-height: 200px;
+ width: 100%;
overflow-y: auto;
z-index: 5;
color: #555;
- margin: -15px 0 0 0;
- > ul {
+ margin: -10px 0 0 0;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
+ > md-option {
list-style-type: none;
position: static;
height: auto;
@@ -23,10 +30,10 @@
min-width: 124px;
padding: 8px 0;
margin: 0;
- box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
border-radius: 2px;
- > li {
+ > span {
opacity: 1;
+ padding-left: 23px;
}
}
}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/upload/upload.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/upload/upload.widget.html
index 60862ea1f7..ac3be76ab1 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/upload/upload.widget.html
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/upload/upload.widget.html
@@ -28,5 +28,5 @@
(change)="onFileChanged($event)">
-
+
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/widget.component.ts b/ng2-components/ng2-activiti-form/src/components/widgets/widget.component.ts
index 8ebdc22997..35437db014 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/widget.component.ts
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/widget.component.ts
@@ -83,6 +83,10 @@ export class WidgetComponent implements AfterViewInit {
this.field.value !== undefined;
}
+ isInvalidFieldRequired() {
+ return !this.field.isValid && !this.field.validationSummary && this.isRequired();
+ }
+
ngAfterViewInit() {
this.fieldChanged.emit(this.field);
}
diff --git a/ng2-components/ng2-activiti-form/src/i18n/en.json b/ng2-components/ng2-activiti-form/src/i18n/en.json
index c05017b260..d738949669 100644
--- a/ng2-components/ng2-activiti-form/src/i18n/en.json
+++ b/ng2-components/ng2-activiti-form/src/i18n/en.json
@@ -5,6 +5,9 @@
},
"PREVIEW": {
"IMAGE_NOT_AVAILABLE": "The preview image is not available."
+ },
+ "FIELD": {
+ "REQUIRED" : "*Required"
}
}
}
diff --git a/ng2-components/ng2-activiti-form/src/services/form.service.spec.ts b/ng2-components/ng2-activiti-form/src/services/form.service.spec.ts
index 0ce38ad345..b287292964 100644
--- a/ng2-components/ng2-activiti-form/src/services/form.service.spec.ts
+++ b/ng2-components/ng2-activiti-form/src/services/form.service.spec.ts
@@ -477,6 +477,7 @@ describe('Form service', () => {
});
it('should return list of people', (done) => {
+ spyOn(service, 'getUserProfileImageApi').and.returnValue('/app/rest/users/2002/picture');
let fakeFilter: string = 'whatever';
service.getWorkflowUsers(fakeFilter).subscribe(result => {
diff --git a/ng2-components/ng2-activiti-form/src/services/form.service.ts b/ng2-components/ng2-activiti-form/src/services/form.service.ts
index 06b61297c2..593d7bc8f7 100644
--- a/ng2-components/ng2-activiti-form/src/services/form.service.ts
+++ b/ng2-components/ng2-activiti-form/src/services/form.service.ts
@@ -352,13 +352,22 @@ export class FormService {
return Observable.fromPromise(this.taskApi.getRestFieldValuesColumn(taskId, field, column)).catch(err => this.handleError(err));
}
+ private getUserProfileImageApi(userId: string): string {
+ return this.apiService.getInstance().activiti.userApi.getUserProfilePictureUrl(userId);
+ }
+
getWorkflowUsers(filter: string, groupId?: string): Observable {
let option: any = {filter: filter};
if (groupId) {
option.groupId = groupId;
}
return Observable.fromPromise(this.usersWorkflowApi.getUsers(option))
- .map((response: any) => response.data || [])
+ .switchMap((response: any) => response.data || [])
+ .map((user: any) => {
+ user.userImage = this.getUserProfileImageApi(user.id);
+ return Observable.of(user);
+ })
+ .combineAll()
.catch(err => this.handleError(err));
}
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/comment-list.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/comment-list.component.ts
index 738a9ce746..5da9f588c3 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/comment-list.component.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/comment-list.component.ts
@@ -79,7 +79,9 @@ export class CommentListComponent {
}
onErrorImageLoad(user: User) {
- user.userImage = null;
+ if (user.userImage) {
+ user.userImage = null;
+ }
}
}
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/people-search.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/people-search.component.ts
index c1c8a59f80..e61ad6a8d9 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/people-search.component.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/people-search.component.ts
@@ -106,6 +106,8 @@ export class PeopleSearchComponent implements OnInit {
}
onErrorImageLoad(user: User) {
- user.userImage = null;
+ if (user.userImage) {
+ user.userImage = null;
+ }
}
}
diff --git a/ng2-components/ng2-activiti-tasklist/src/components/people.component.ts b/ng2-components/ng2-activiti-tasklist/src/components/people.component.ts
index e8e8e8b805..4f97bfb243 100644
--- a/ng2-components/ng2-activiti-tasklist/src/components/people.component.ts
+++ b/ng2-components/ng2-activiti-tasklist/src/components/people.component.ts
@@ -156,6 +156,8 @@ export class PeopleComponent implements OnInit, AfterViewInit {
}
onErrorImageLoad(user: User) {
- user.userImage = null;
+ if (user.userImage) {
+ user.userImage = null;
+ }
}
}