diff --git a/demo-shell/src/app/components/datatable/datatable.component.html b/demo-shell/src/app/components/datatable/datatable.component.html index 39f3fa192b..79a907948d 100644 --- a/demo-shell/src/app/components/datatable/datatable.component.html +++ b/demo-shell/src/app/components/datatable/datatable.component.html @@ -18,6 +18,7 @@ [selectionMode]="selectionMode" [multiselect]="multiselect" [actions]="true" + [resolverFn]="resolver" rowStyleClass="custom-row-style" (showRowActionsMenu)="onShowRowActionsMenu($event)" (executeRowAction)="onExecuteRowAction($event)"> @@ -28,7 +29,11 @@ - + + + + {{value | json }} + --> diff --git a/demo-shell/src/app/components/datatable/datatable.component.ts b/demo-shell/src/app/components/datatable/datatable.component.ts index 5caab6e513..751287cd03 100644 --- a/demo-shell/src/app/components/datatable/datatable.component.ts +++ b/demo-shell/src/app/components/datatable/datatable.component.ts @@ -16,8 +16,16 @@ */ import { Component, Input } from '@angular/core'; -import { DataColumn, DataRow } from '@alfresco/adf-core'; -import { DataCellEvent, DataRowActionEvent, DataSorting, ObjectDataColumn, ObjectDataRow, ObjectDataTableAdapter } from '@alfresco/adf-core'; +import { + DataCellEvent, + DataColumn, + DataRow, + DataRowActionEvent, + DataSorting, + ObjectDataColumn, + ObjectDataRow, + ObjectDataTableAdapter +} from '@alfresco/adf-core'; export class FilteredDataAdapter extends ObjectDataTableAdapter { @@ -75,6 +83,20 @@ export class DataTableComponent { this.reset(); } + resolver(row: DataRow, col: DataColumn): any { + const value = row.getValue(col.key); + if (col.key === 'users') { + return (value || []).map(user => `${user.firstName} ${user.lastName}`).toString(); + } + + if (col.key === 'status') { + const users = row.getValue('users'); + return (value || []).map((status, index) => ({ 'name': `${users[index].firstName} ${users[index].lastName}`, status })); + } + + return value; + } + /* spellchecker: disable */ reset() { this.data = new FilteredDataAdapter( @@ -90,7 +112,21 @@ export class DataTableComponent { createdOn: new Date(2016, 6, 2, 15, 8, 1), createdBy: this._createdBy, icon: 'material-icons://folder_open', - json: null + json: null, + users: [ + { + firstName: 'Super', + lastName: 'Man' + }, + { + firstName: 'Iron', + lastName: 'Man' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] }, { id: 2, @@ -98,7 +134,21 @@ export class DataTableComponent { createdOn: new Date(2016, 6, 2, 15, 8, 2), createdBy: this._createdBy, icon: 'material-icons://accessibility', - json: null + json: null, + users: [ + { + firstName: 'Mister', + lastName: 'Bean' + }, + { + firstName: 'Doctor', + lastName: 'Strange' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] }, { id: 3, @@ -106,7 +156,21 @@ export class DataTableComponent { createdOn: new Date(2016, 6, 2, 15, 8, 3), createdBy: this._createdBy, icon: 'material-icons://alarm', - json: null + json: null, + users: [ + { + firstName: 'Thunder', + lastName: 'Thor' + }, + { + firstName: 'Marvel', + lastName: 'Avenger' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] }, { id: 4, @@ -120,10 +184,45 @@ export class DataTableComponent { createdOn: new Date(2016, 6, 2, 15, 8, 4), createdBy: { name: 'Felipe', - lastname: 'Melo' + lastName: 'Melo' }, icon: 'material-icons://alarm' - } + }, + users: [ + { + firstName: 'Spider', + lastName: 'Man' + }, + { + firstName: '17', + lastName: 'Again' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] + }, + { + id: 5, + name: 'I am using custom resolver', + createdOn: new Date(2016, 6, 2, 15, 8, 4), + createdBy: this._createdBy, + icon: 'material-icons://person_outline', + users: [ + { + firstName: 'Captain', + lastName: 'America' + }, + { + firstName: 'John', + lastName: 'Wick' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] } ], [ @@ -132,7 +231,9 @@ export class DataTableComponent { { type: 'date', key: 'createdOn', title: 'Created On', sortable: true, cssClass: 'adf-ellipsis-cell adf-expand-cell-2' }, { type: 'text', key: 'name', title: 'Name', cssClass: 'adf-ellipsis-cell', sortable: true }, { type: 'text', key: 'createdBy.name', title: 'Created By', sortable: true, cssClass: ''}, - { type: 'json', key: 'json', title: 'Json', cssClass: 'adf-expand-cell-2'} + { type: 'json', key: 'json', title: 'Json', cssClass: 'adf-expand-cell-2'}, + { type: 'text', key: 'users', title: 'Users', cssClass: 'adf-expand-cell-2'}, + { type: 'json', key: 'status', title: 'Status', cssClass: 'adf-expand-cell-2'} ] ); diff --git a/docs/README.md b/docs/README.md index 336d01fb5e..6419436280 100644 --- a/docs/README.md +++ b/docs/README.md @@ -209,6 +209,7 @@ for more information about installing and using the source code. | [Form service](core/services/form.service.md) | Implements Process Services form methods | [Source](../lib/core/form/services/form.service.ts) | | [Highlight Transform service](core/services/highlight-transform.service.md) | Adds HTML to a string to highlight chosen sections. | [Source](../lib/core/services/highlight-transform.service.ts) | | [Identity Group service](core/services/identity-group.service.md) | Performs CRUD operations on identity groups. | [Source](../lib/core/userinfo/services/identity-group.service.ts) | +| [Identity role service](core/services/identity-role.service.md) | Provides APIs for working with the Roles in Identity Services. | [Source](../lib/core/userinfo/services/identity-role.service.ts) | | [Identity user service](core/services/identity-user.service.md) | Gets OAuth2 personal details and roles for users and performs CRUD operations on identity users. | [Source](../lib/core/userinfo/services/identity-user.service.ts) | | [JWT helper service](core/services/jwt-helper.service.md) | Decodes a JSON Web Token (JWT) to a JavaScript object. | [Source](../lib/core/services/jwt-helper.service.ts) | | [Log Service](core/services/log.service.md) | Provides log functionality. | [Source](../lib/core/services/log.service.ts) | diff --git a/docs/core/components/datatable.component.md b/docs/core/components/datatable.component.md index 8def0c4c8b..2919a34eef 100644 --- a/docs/core/components/datatable.component.md +++ b/docs/core/components/datatable.component.md @@ -354,6 +354,7 @@ Learm more about styling your datatable: [Customizing the component's styles](#c | loading | `boolean` | false | Flag that indicates if the datatable is in loading state and needs to show the loading template (see the docs to learn how to configure a loading template). | | multiselect | `boolean` | false | Toggles multiple row selection, which renders checkboxes at the beginning of each row. | | noPermission | `boolean` | false | Flag that indicates if the datatable should show the "no permission" template. | +| resolverFn | `Function` | | Custom resolver function which is used to parse dynamic column objects. see [Resolver Function](#resolver-function)| | rowMenuCacheEnabled | `boolean` | true | Should the items for the row actions menu be cached for reuse after they are loaded the first time? | | rowStyle | `string` | | The inline style to apply to every row. See [NgStyle](https://angular.io/docs/ts/latest/api/common/index/NgStyle-directive.html) docs for more details and usage examples. | | rowStyleClass | `string` | "" | The CSS class to apply to every row. | @@ -754,6 +755,73 @@ Once set up, the sticky header behaves as shown in the image below: ![](../../docassets/images/datatable-sticky-header.png) +## Resolver Function + +If you have a table with complex object, you might want to parse it before to display. you can do this using following steps. + +# what is resolver +Resolver is a pure function which gets executed on each row and columns. + +# purpose +It helps to parse the complex object in the data table. + +# example +Assume we want to merge two properties and show them in a text format + +```json + { + name: 'I am using custom resolver', + users: [ + { + firstName: 'Captain', + lastName: 'America' + }, + { + firstName: 'John', + lastName: 'Wick' + } + ], + status: [ + 'I am here to save the world.. By world means AMERICA', + 'That nobody is John Wick…' + ] + } +``` + + +here is the sample resolver which merge the users property and status and it will show in one column + +```javascript + resolver(row: DataRow, col: DataColumn): any { + const value = row.getValue(col.key); + + // Desired parsing logic + if (col.key === 'status') { + const users = row.getValue('users'); + return (value || []).map((status, index) => `name - ${users[index].firstName} ${users[index].lastName} status: ${status}` ).toString(); + } + + return value; + } +``` + +```html + + + + + + + +``` + + ![](../../docassets/images/custom-data-table-resolver.png) + + + + ## See also - [Data column component](data-column.component.md) diff --git a/docs/core/components/notification-history.component.md b/docs/core/components/notification-history.component.md index f94c0b92be..ed9263396b 100644 --- a/docs/core/components/notification-history.component.md +++ b/docs/core/components/notification-history.component.md @@ -5,7 +5,7 @@ Status: Experimental Last reviewed: 2019-06-05 --- -# [Notification History component](../../../lib/core/notification-history/notification-history.component.ts "Defined in notification-history.component.ts") +# [Notification History component](../../../lib/core/notifications/components/notification-history.component.ts "Defined in notification-history.component.ts") This component is in the current status just an experimental component. The main purpose of the [Notification history component](../../core/components/notification-history.component.md) is list all the notification received in the current session. They will disappear from the list after the refresh. diff --git a/docs/core/models/bpm-user.model.md b/docs/core/models/bpm-user.model.md index d3a0c57839..3b3412fdd6 100644 --- a/docs/core/models/bpm-user.model.md +++ b/docs/core/models/bpm-user.model.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [Bpm User model](../../../lib/core/userinfo/models/bpm-user.model.ts "Defined in bpm-user.model.ts") +# [Bpm User model](../../../lib/core/models/bpm-user.model.ts "Defined in bpm-user.model.ts") Contains information about a Process Services user. diff --git a/docs/core/models/ecm-user.model.md b/docs/core/models/ecm-user.model.md index 8d87dbe90a..032b007065 100644 --- a/docs/core/models/ecm-user.model.md +++ b/docs/core/models/ecm-user.model.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [Ecm User model](../../../lib/core/userinfo/models/ecm-user.model.ts "Defined in ecm-user.model.ts") +# [Ecm User model](../../../lib/core/models/ecm-user.model.ts "Defined in ecm-user.model.ts") Contains information about a Content Services user. diff --git a/docs/core/services/bpm-user.service.md b/docs/core/services/bpm-user.service.md index c580f4e9cc..3c622dc385 100644 --- a/docs/core/services/bpm-user.service.md +++ b/docs/core/services/bpm-user.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Bpm User service](../../../lib/core/userinfo/services/bpm-user.service.ts "Defined in bpm-user.service.ts") +# [Bpm User service](../../../lib/core/services/bpm-user.service.ts "Defined in bpm-user.service.ts") Gets information about the current Process Services user. diff --git a/docs/core/services/ecm-user.service.md b/docs/core/services/ecm-user.service.md index ddbb175f81..d579ab010d 100644 --- a/docs/core/services/ecm-user.service.md +++ b/docs/core/services/ecm-user.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-11-19 --- -# [Ecm User service](../../../lib/core/userinfo/services/ecm-user.service.ts "Defined in ecm-user.service.ts") +# [Ecm User service](../../../lib/core/services/ecm-user.service.ts "Defined in ecm-user.service.ts") Gets information about a Content Services user. diff --git a/docs/core/services/identity-group.service.md b/docs/core/services/identity-group.service.md index 2c13202652..63c5007012 100644 --- a/docs/core/services/identity-group.service.md +++ b/docs/core/services/identity-group.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-07-13 --- -# [Identity Group service](../../../lib/core/userinfo/services/identity-group.service.ts "Defined in identity-group.service.ts") +# [Identity Group service](../../../lib/core/services/identity-group.service.ts "Defined in identity-group.service.ts") Performs CRUD operations on identity groups. @@ -29,45 +29,45 @@ Performs CRUD operations on identity groups. - _groupId:_ `string` - Id of the target group - _roleNames:_ `string[]` - Array of role names - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - True if the group has one or more of the roles, false otherwise -- **createGroup**(newGroup: [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **createGroup**(newGroup: [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Creates new group. - - _newGroup:_ [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object of containing the new group details. + - _newGroup:_ [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts) - Object of containing the new group details. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group created. - **deleteGroup**(groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Deletes Group. - _groupId:_ `string` - Id of the group. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group deleted. -- **findGroupsByName**(searchParams: [`IdentityGroupSearchParam`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **findGroupsByName**(searchParams: [`IdentityGroupSearchParam`](../../../lib/core/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Finds groups filtered by name. - - _searchParams:_ [`IdentityGroupSearchParam`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object containing the name filter string + - _searchParams:_ [`IdentityGroupSearchParam`](../../../lib/core/models/identity-group.model.ts) - Object containing the name filter string - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of group information - **getClientIdByApplicationName**(applicationName: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets the client Id using the app name. - _applicationName:_ `string` - Name of the app - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - client Id string -- **getClientRoles**(groupId: `string`, clientId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+- **getClientRoles**(groupId: `string`, clientId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets client roles. - _groupId:_ `string` - Id of the target group - _clientId:_ `string` - Id of the client - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - List of roles -- **getGroupRoles**(groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - List of roles +- **getGroupRoles**(groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets details for a specified group. - _groupId:_ `string` - Id of the target group - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Group details -- **getGroups**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - Group details +- **getGroups**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]>`
Gets all groups. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>` - Array of group information objects -- **getTotalGroupsCount**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]>` - Array of group information objects +- **getTotalGroupsCount**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/models/identity-group.model.ts)`>`
Gets groups total count. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` - Number of groups count. -- **queryGroups**(requestQuery: [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/userinfo/models/identity-group.model.ts)`>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupCountModel`](../../../lib/core/models/identity-group.model.ts)`>` - Number of groups count. +- **queryGroups**(requestQuery: [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/models/identity-group.model.ts)`>`
Queries groups. - - _requestQuery:_ [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` - Array of user information objects -- **updateGroup**(groupId: `string`, updatedGroup: [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ - _requestQuery:_ [`IdentityGroupQueryCloudRequestModel`](../../../lib/core/models/identity-group.model.ts) - + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupQueryResponse`](../../../lib/core/models/identity-group.model.ts)`>` - Array of user information objects +- **updateGroup**(groupId: `string`, updatedGroup: [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Updates group details. - _groupId:_ `string` - Id of the targeted group. - - _updatedGroup:_ [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) - Object of containing the group details + - _updatedGroup:_ [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts) - Object of containing the group details - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the group updated. ## See also diff --git a/docs/core/services/identity-role.service.md b/docs/core/services/identity-role.service.md index ee06820863..1c2736959b 100644 --- a/docs/core/services/identity-role.service.md +++ b/docs/core/services/identity-role.service.md @@ -5,6 +5,6 @@ Status: Active Last reviewed: 2019-09-24 --- -# [Identity role service](../../../lib/core/userinfo/services/identity-role.service.ts "Defined in identity-role.service.ts") +# [Identity role service](../../../lib/core/services/identity-role.service.ts "Defined in identity-role.service.ts") Provides APIs for working with the Roles in Identity Services. diff --git a/docs/core/services/identity-user.service.md b/docs/core/services/identity-user.service.md index 6ae1fbce41..9f97b94935 100644 --- a/docs/core/services/identity-user.service.md +++ b/docs/core/services/identity-user.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2019-07-12 --- -# [Identity user service](../../../lib/core/userinfo/services/identity-user.service.ts "Defined in identity-user.service.ts") +# [Identity user service](../../../lib/core/services/identity-user.service.ts "Defined in identity-user.service.ts") Gets OAuth2 personal details and roles for users and performs CRUD operations on identity users. @@ -13,15 +13,15 @@ Gets OAuth2 personal details and roles for users and performs CRUD operations on ### Methods -- **assignRoles**(userId: `string`, roles: [`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **assignRoles**(userId: `string`, roles: [`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Assigns roles to the user. - _userId:_ `string` - Id of the user. - - _roles:_ [`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]` - Array of roles. + - _roles:_ [`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]` - Array of roles. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the role assigned. -- **changePassword**(userId: `string`, newPassword: [`IdentityUserPasswordModel`](../../../lib/core/userinfo/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **changePassword**(userId: `string`, newPassword: [`IdentityUserPasswordModel`](../../../lib/core/services/identity-user.service.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Changes user password. - _userId:_ `string` - Id of the user. - - _newPassword:_ [`IdentityUserPasswordModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - + - _newPassword:_ [`IdentityUserPasswordModel`](../../../lib/core/services/identity-user.service.ts) - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the password changed. - **checkUserHasAnyApplicationRole**(userId: `string`, applicationName: `string`, roleNames: `string[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Checks if a user has any application role. @@ -50,9 +50,9 @@ Gets OAuth2 personal details and roles for users and performs CRUD operations on - _userId:_ `string` - ID of the target user - _roleNames:_ `string[]` - Array of roles to check for - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - True if the user has one of the roles, false otherwise -- **createUser**(newUser: [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **createUser**(newUser: [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Creates new user. - - _newUser:_ [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - Object containing the new user details. + - _newUser:_ [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts) - Object containing the new user details. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the user created. - **deleteUser**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Deletes User. @@ -74,14 +74,14 @@ Gets OAuth2 personal details and roles for users and performs CRUD operations on Find users based on search input. - _search:_ `string` - Search query string - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of users -- **getAssignedRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+- **getAssignedRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets assigned roles. - _userId:_ `string` - Id of the user. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Array of assigned roles information objects -- **getAvailableRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - Array of assigned roles information objects +- **getAvailableRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets available roles - _userId:_ `string` - Id of the user. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Array of available roles information objects + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - Array of available roles information objects - **getClientIdByApplicationName**(applicationName: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets the client ID for an application. - _applicationName:_ `string` - Name of the application @@ -91,57 +91,57 @@ Gets OAuth2 personal details and roles for users and performs CRUD operations on - _userId:_ `string` - ID of the target user - _clientId:_ `string` - ID of the client app - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - List of client roles -- **getCurrentUserInfo**(): [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)
+- **getCurrentUserInfo**(): [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)
Gets the name and other basic details of the current user. - - **Returns** [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - The user's details -- **getEffectiveRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+ - **Returns** [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts) - The user's details +- **getEffectiveRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets effective roles. - _userId:_ `string` - Id of the user. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Array of composite roles information objects -- **getInvolvedGroups**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - Array of composite roles information objects +- **getInvolvedGroups**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]>`
Gets involved groups. - _userId:_ `string` - Id of the user. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]>` - Array of involved groups information objects. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]>` - Array of involved groups information objects. - **getTotalUsersCount**(): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets users total count. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Number of users count. -- **getUserRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>`
+- **getUserRoles**(userId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>`
Gets a list of roles for a user. - _userId:_ `string` - ID of the user - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]>` - Array of role info objects -- **getUsers**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]>` - Array of role info objects +- **getUsers**(): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>`
Gets details for all users. - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>` - Array of user info objects -- **getUsersByRolesWithCurrentUser**(roleNames: `string[]`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>`
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>` - Array of user info objects +- **getUsersByRolesWithCurrentUser**(roleNames: `string[]`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>`
Gets an array of users (including the current user) who have any of the roles in the supplied list. - _roleNames:_ `string[]` - List of role names to look for - - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>` - Array of user info objects -- **getUsersByRolesWithoutCurrentUser**(roleNames: `string[]`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>`
+ - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>` - Array of user info objects +- **getUsersByRolesWithoutCurrentUser**(roleNames: `string[]`): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>`
Gets an array of users (not including the current user) who have any of the roles in the supplied list. - _roleNames:_ `string[]` - List of role names to look for - - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]>` - Array of user info objects -- **joinGroup**(joinGroupRequest: [`IdentityJoinGroupRequestModel`](../../../lib/core/userinfo/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]>` - Array of user info objects +- **joinGroup**(joinGroupRequest: [`IdentityJoinGroupRequestModel`](../../../lib/core/services/identity-user.service.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Joins group. - - _joinGroupRequest:_ [`IdentityJoinGroupRequestModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - Details of join group request (IdentityJoinGroupRequestModel). + - _joinGroupRequest:_ [`IdentityJoinGroupRequestModel`](../../../lib/core/services/identity-user.service.ts) - Details of join group request (IdentityJoinGroupRequestModel). - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the user joined the group. - **leaveGroup**(userId: `any`, groupId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Leaves group. - _userId:_ `any` - Id of the user. - _groupId:_ `string` - Id of the group. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the user left the group. -- **queryUsers**(requestQuery: [`IdentityUserQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserQueryResponse`](../../../lib/core/userinfo/models/identity-user.model.ts)`>`
+- **queryUsers**(requestQuery: [`IdentityUserQueryCloudRequestModel`](../../../lib/core/services/identity-user.service.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserQueryResponse`](../../../lib/core/services/identity-user.service.ts)`>`
Gets details for all users. - - _requestQuery:_ [`IdentityUserQueryCloudRequestModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserQueryResponse`](../../../lib/core/userinfo/models/identity-user.model.ts)`>` - Array of user information objects. -- **removeRoles**(userId: `string`, removedRoles: [`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
+ - _requestQuery:_ [`IdentityUserQueryCloudRequestModel`](../../../lib/core/services/identity-user.service.ts) - + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`IdentityUserQueryResponse`](../../../lib/core/services/identity-user.service.ts)`>` - Array of user information objects. +- **removeRoles**(userId: `string`, removedRoles: [`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Removes assigned roles. - _userId:_ `string` - Id of the user. - - _removedRoles:_ [`IdentityRoleModel`](../../../lib/core/userinfo/models/identity-role.model.ts)`[]` - + - _removedRoles:_ [`IdentityRoleModel`](../../../lib/core/models/identity-role.model.ts)`[]` - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the role removed. -- **updateUser**(userId: `string`, updatedUser: [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
+- **updateUser**(userId: `string`, updatedUser: [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)``
Updates user details. - _userId:_ `string` - Id of the user. - - _updatedUser:_ [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts) - Object containing the user details. + - _updatedUser:_ [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts) - Object containing the user details. - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` - Empty response when the user updated. ## See also diff --git a/docs/core/services/notification.service.md b/docs/core/services/notification.service.md index c8f90ec853..c8c15efc63 100644 --- a/docs/core/services/notification.service.md +++ b/docs/core/services/notification.service.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-06-08 --- -# [Notification Service](../../../lib/core/services/notification.service.ts "Defined in notification.service.ts") +# [Notification Service](../../../lib/core/notifications/services/notification.service.ts "Defined in notification.service.ts") Shows a notification message with optional feedback. @@ -17,33 +17,36 @@ Shows a notification message with optional feedback. - **dismissSnackMessageAction**()
dismiss the notification snackbar -- **openSnackMessage**(message: `string`, config?: `number|MatSnackBarConfig`, translationArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **openSnackMessage**(message: `string`, config?: `number|MatSnackBarConfig`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Opens a SnackBar notification to show a message. - _message:_ `string` - The message (or resource key) to show. - _config:_ `number|MatSnackBarConfig` - (Optional) Time before notification disappears after being shown or MatSnackBarConfig object - - _translationArgs:_ `any` - (Optional) The interpolation parameters to add for the translation + - _interpolateArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar -- **openSnackMessageAction**(message: `string`, action: `string`, config?: `number|MatSnackBarConfig`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **openSnackMessageAction**(message: `string`, action: `string`, config?: `number|MatSnackBarConfig`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Opens a SnackBar notification with a message and a response button. - _message:_ `string` - The message (or resource key) to show. - _action:_ `string` - Caption for the response button - _config:_ `number|MatSnackBarConfig` - (Optional) Time before notification disappears after being shown or MatSnackBarConfig object + - _interpolateArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar -- **showError**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **showError**(message: `string`, action?: `string`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Rase error message - _message:_ `string` - Text message or translation key for the message. - _action:_ `string` - (Optional) Action name + - _interpolateArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - - **showInfo**(message: `string`, action?: `string`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Rase info message - _message:_ `string` - Text message or translation key for the message. - _action:_ `string` - (Optional) Action name - - _interpolateArgs:_ `any` - (Optional) + - _interpolateArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - -- **showWarning**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+- **showWarning**(message: `string`, action?: `string`, interpolateArgs?: `any`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
Rase warning message - _message:_ `string` - Text message or translation key for the message. - _action:_ `string` - (Optional) Action name + - _interpolateArgs:_ `any` - (Optional) The interpolation parameters to add for the translation - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - ## Details diff --git a/docs/docassets/images/custom-data-table-resolver.png b/docs/docassets/images/custom-data-table-resolver.png new file mode 100644 index 0000000000..978b5b16d8 Binary files /dev/null and b/docs/docassets/images/custom-data-table-resolver.png differ diff --git a/docs/insights/components/analytics-generator.component.md b/docs/insights/components/analytics-generator.component.md index 7b05b473ba..5ee21b9698 100644 --- a/docs/insights/components/analytics-generator.component.md +++ b/docs/insights/components/analytics-generator.component.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [Analytics Generator Component](../../../lib/insights/analytics-process/components/analytics-generator.component.ts "Defined in analytics-generator.component.ts") +# [Analytics Generator Component](../../../lib/insights/src/lib/analytics-process/components/analytics-generator.component.ts "Defined in analytics-generator.component.ts") Generates and shows charts @@ -24,7 +24,7 @@ Generates and shows charts | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | reportId | `number` | | | -| reportParamQuery | [`ReportQuery`](../../../lib/insights/diagram/models/report/reportQuery.model.ts) | undefined | | +| reportParamQuery | [`ReportQuery`](../../../lib/insights/src/lib/diagram/models/report/reportQuery.model.ts) | undefined | | ### Events diff --git a/docs/insights/components/analytics-report-list.component.md b/docs/insights/components/analytics-report-list.component.md index 6c8104b726..53c8847df5 100644 --- a/docs/insights/components/analytics-report-list.component.md +++ b/docs/insights/components/analytics-report-list.component.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [APS Analytics List Component](../../../lib/insights/analytics-process/components/analytics-report-list.component.ts "Defined in analytics-report-list.component.ts") +# [APS Analytics List Component](../../../lib/insights/src/lib/analytics-process/components/analytics-report-list.component.ts "Defined in analytics-report-list.component.ts") Shows a list of all available reports @@ -31,5 +31,5 @@ Shows a list of all available reports | Name | Type | Description | | ---- | ---- | ----------- | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | -| reportClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ReportParametersModel`](../../../lib/insights/diagram/models/report/reportParameters.model.ts)`>` | | +| reportClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ReportParametersModel`](../../../lib/insights/src/lib/diagram/models/report/reportParameters.model.ts)`>` | | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<>` | | diff --git a/docs/insights/components/analytics.component.md b/docs/insights/components/analytics.component.md index 2914fc6536..6f9c30bfe7 100644 --- a/docs/insights/components/analytics.component.md +++ b/docs/insights/components/analytics.component.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [APS Analytics Component](../../../lib/insights/analytics-process/components/analytics.component.ts "Defined in analytics.component.ts") +# [APS Analytics Component](../../../lib/insights/src/lib/analytics-process/components/analytics.component.ts "Defined in analytics.component.ts") Shows the charts related to the reportId passed as input diff --git a/docs/insights/components/diagram.component.md b/docs/insights/components/diagram.component.md index 495e4f8463..2eae4c65f7 100644 --- a/docs/insights/components/diagram.component.md +++ b/docs/insights/components/diagram.component.md @@ -4,7 +4,7 @@ Added: v2.0.0 Status: Active --- -# [Diagram Component](../../../lib/insights/diagram/components/diagram.component.ts "Defined in diagram.component.ts") +# [Diagram Component](../../../lib/insights/src/lib/diagram/components/diagram.component.ts "Defined in diagram.component.ts") Displays process diagrams. diff --git a/docs/insights/components/widget.component.md b/docs/insights/components/widget.component.md index 90700735bb..8345e59047 100644 --- a/docs/insights/components/widget.component.md +++ b/docs/insights/components/widget.component.md @@ -5,7 +5,7 @@ Status: Active Last reviewed: 2018-03-29 --- -# [Widget component](../../../lib/insights/analytics-process/components/widgets/widget.component.ts "Defined in widget.component.ts") +# [Widget component](../../../lib/insights/src/lib/analytics-process/components/widgets/widget.component.ts "Defined in widget.component.ts") Base class for standard and custom widget classes. diff --git a/docs/process-services-cloud/components/group-cloud.component.md b/docs/process-services-cloud/components/group-cloud.component.md index 5c960c09fb..b54169f1a9 100644 --- a/docs/process-services-cloud/components/group-cloud.component.md +++ b/docs/process-services-cloud/components/group-cloud.component.md @@ -28,7 +28,7 @@ Searches Groups. | ---- | ---- | ------------- | ----------- | | appName | `string` | | Name of the application. If specified this shows the users who have access to the app. | | mode | `string` | | User selection mode (single/multiple). | -| preSelectGroups | [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. | +| preSelectGroups | [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. | | roles | `string[]` | \[] | Role names of the groups to be listed. | | searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group | | title | `string` | | Title of the field | @@ -37,8 +37,8 @@ Searches Groups. | Name | Type | Description | | ---- | ---- | ----------- | -| removeGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` | Emitted when a group is removed. | -| selectGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts)`>` | Emitted when a group is selected. | +| removeGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`>` | Emitted when a group is removed. | +| selectGroup | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts)`>` | Emitted when a group is selected. | ## Details diff --git a/docs/process-services-cloud/components/people-cloud.component.md b/docs/process-services-cloud/components/people-cloud.component.md index c3cb17eb9f..4bd69cdedc 100644 --- a/docs/process-services-cloud/components/people-cloud.component.md +++ b/docs/process-services-cloud/components/people-cloud.component.md @@ -26,7 +26,7 @@ Allows one or more users to be selected (with auto-suggestion) based on the inpu | ---- | ---- | ------------- | ----------- | | appName | `string` | | Name of the application. If specified, this shows the users who have access to the app. | | mode | `string` | | User selection mode (single/multiple). | -| preSelectUsers | [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]` | | Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username | +| preSelectUsers | [`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`[]` | | Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username | | roles | `string[]` | | Role names of the users to be listed. | | searchUserCtrl | `FormControl` | new FormControl() | FormControl to search the user | | title | `string` | | Placeholder translation key | @@ -36,6 +36,6 @@ Allows one or more users to be selected (with auto-suggestion) based on the inpu | Name | Type | Description | | ---- | ---- | ----------- | -| removeUser | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`>` | Emitted when a selected user is removed in multi selection mode. | -| selectUser | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`>` | Emitted when a user is selected. | +| removeUser | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`>` | Emitted when a selected user is removed in multi selection mode. | +| selectUser | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`IdentityUserModel`](../../../lib/core/models/identity-user.model.ts)`>` | Emitted when a user is selected. | | warning | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an warning occurs. | diff --git a/docs/process-services-cloud/pipes/group-initial.pipe.md b/docs/process-services-cloud/pipes/group-initial.pipe.md index e8772ea872..8c54fc61d7 100644 --- a/docs/process-services-cloud/pipes/group-initial.pipe.md +++ b/docs/process-services-cloud/pipes/group-initial.pipe.md @@ -23,7 +23,7 @@ Extracts the initial character from a group name. ## Details -This pipe takes a [`IdentityGroupModel`](../../../lib/core/userinfo/models/identity-group.model.ts) +This pipe takes a [`IdentityGroupModel`](../../../lib/core/models/identity-group.model.ts) object as its parameter and extracts the initial character from the `name` property. The initial is a handy way to identify the group in lists and other situations where there is limited screen space available. diff --git a/docs/process-services/components/process-list.component.md b/docs/process-services/components/process-list.component.md index dd75296209..0fdd807518 100644 --- a/docs/process-services/components/process-list.component.md +++ b/docs/process-services/components/process-list.component.md @@ -58,6 +58,7 @@ when the process list is empty: | presetColumn | `string` | | Custom preset column schema in JSON format. | | processDefinitionId | `string` | | The Definition Id of the process. | | processInstanceId | `number \| string` | | The id of the process instance. | +| resolverFn | `Function` | | Resolver function is used to show dynamic complex column objects see the [docs](../../core/interfaces/datatable-adapter.interface.md) to learn how to configure a resolverFn. | | selectFirstRow | `boolean` | true | Toggles default selection of the first row | | selectionMode | `string` | "single" | Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode, you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows. | | size | `number` | | The number of processes to fetch in each page. | diff --git a/lib/core/datatable/components/datatable/datatable-cell.component.ts b/lib/core/datatable/components/datatable/datatable-cell.component.ts index aa866091a8..819362e631 100644 --- a/lib/core/datatable/components/datatable/datatable-cell.component.ts +++ b/lib/core/datatable/components/datatable/datatable-cell.component.ts @@ -77,6 +77,10 @@ export class DataTableCellComponent implements OnInit, OnDestroy { @Input() tooltip: string; + /** Custom resolver function which is used to parse dynamic column objects */ + @Input() + resolverFn: (row: DataRow, col: DataColumn) => any = null; + protected onDestroy$ = new Subject(); constructor(protected alfrescoApiService: AlfrescoApiService) {} @@ -98,7 +102,7 @@ export class DataTableCellComponent implements OnInit, OnDestroy { protected updateValue() { if (this.column && this.column.key && this.row && this.data) { - const value = this.data.getValue(this.row, this.column); + const value = this.data.getValue(this.row, this.column, this.resolverFn); this.value$.next(value); diff --git a/lib/core/datatable/components/datatable/datatable.component.html b/lib/core/datatable/components/datatable/datatable.component.html index 6d8ebdad09..657980cf44 100644 --- a/lib/core/datatable/components/datatable/datatable.component.html +++ b/lib/core/datatable/components/datatable/datatable.component.html @@ -141,6 +141,7 @@ [data]="data" [column]="col" [row]="row" + [resolverFn]="resolverFn" [tooltip]="getCellTooltip(row, col)"> @@ -150,6 +151,7 @@ [data]="data" [column]="col" [row]="row" + [resolverFn]="resolverFn" [tooltip]="getCellTooltip(row, col)"> @@ -159,6 +161,7 @@ [data]="data" [column]="col" [row]="row" + [resolverFn]="resolverFn" [tooltip]="getCellTooltip(row, col)"> @@ -169,6 +172,7 @@ [data]="data" [column]="col" [row]="row" + [resolverFn]="resolverFn" [tooltip]="getCellTooltip(row, col)"> @@ -177,6 +181,7 @@ [editable]="col.editable" [data]="data" [column]="col" + [resolverFn]="resolverFn" [row]="row"> @@ -189,7 +194,7 @@
+ [ngTemplateOutletContext]="{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }">
diff --git a/lib/core/datatable/components/datatable/datatable.component.ts b/lib/core/datatable/components/datatable/datatable.component.ts index d863dea578..cbb7ffff13 100644 --- a/lib/core/datatable/components/datatable/datatable.component.ts +++ b/lib/core/datatable/components/datatable/datatable.component.ts @@ -161,6 +161,13 @@ export class DataTableComponent implements AfterContentInit, OnChanges, DoCheck, @Input() rowMenuCacheEnabled = true; + /** + * Custom resolver function which is used to parse dynamic column objects + * see the docs to learn how to configure a resolverFn. + */ + @Input() + resolverFn: (row: DataRow, col: DataColumn) => any = null; + noContentTemplate: TemplateRef; noPermissionTemplate: TemplateRef; loadingTemplate: TemplateRef; diff --git a/lib/core/datatable/components/datatable/json-cell.component.ts b/lib/core/datatable/components/datatable/json-cell.component.ts index 785823fd95..f6faf7093f 100644 --- a/lib/core/datatable/components/datatable/json-cell.component.ts +++ b/lib/core/datatable/components/datatable/json-cell.component.ts @@ -52,12 +52,12 @@ export class JsonCellComponent extends DataTableCellComponent implements OnInit ngOnInit() { if (this.column && this.column.key && this.row && this.data) { - this.value$.next(this.data.getValue(this.row, this.column)); + this.value$.next(this.data.getValue(this.row, this.column, this.resolverFn)); } } view() { - const rawValue: string | object = this.data.getValue(this.row, this.column); + const rawValue: string | object = this.data.getValue(this.row, this.column, this.resolverFn); const value = typeof rawValue === 'object' ? JSON.stringify(rawValue || {}, null, 2) : rawValue; diff --git a/lib/core/datatable/components/datatable/location-cell.component.ts b/lib/core/datatable/components/datatable/location-cell.component.ts index bd37d216ee..4105344618 100644 --- a/lib/core/datatable/components/datatable/location-cell.component.ts +++ b/lib/core/datatable/components/datatable/location-cell.component.ts @@ -52,7 +52,8 @@ export class LocationCellComponent extends DataTableCellComponent implements OnI if (this.column && this.column.key && this.row && this.data) { const path: PathInfoEntity = this.data.getValue( this.row, - this.column + this.column, + this.resolverFn ); if (path && path.name && path.elements) { diff --git a/lib/core/datatable/data/datatable-adapter.ts b/lib/core/datatable/data/datatable-adapter.ts index 698f31160d..b1719baac7 100644 --- a/lib/core/datatable/data/datatable-adapter.ts +++ b/lib/core/datatable/data/datatable-adapter.ts @@ -28,7 +28,7 @@ export interface DataTableAdapter { setRows(rows: Array): void; getColumns(): Array; setColumns(columns: Array): void; - getValue(row: DataRow, col: DataColumn): any; + getValue(row: DataRow, col: DataColumn, resolverFn?: (row: DataRow, col: DataColumn) => any): any; getSorting(): DataSorting; setSorting(sorting: DataSorting): void; sort(key?: string, direction?: string): void; diff --git a/lib/core/datatable/data/object-datatable-adapter.ts b/lib/core/datatable/data/object-datatable-adapter.ts index a34042a045..7c0e036d80 100644 --- a/lib/core/datatable/data/object-datatable-adapter.ts +++ b/lib/core/datatable/data/object-datatable-adapter.ts @@ -99,7 +99,7 @@ export class ObjectDataTableAdapter implements DataTableAdapter { this._columns = columns || []; } - getValue(row: DataRow, col: DataColumn): any { + getValue(row: DataRow, col: DataColumn, resolver?: (row: DataRow, col: DataColumn) => any ): any { if (!row) { throw new Error('Row not found'); } @@ -107,6 +107,10 @@ export class ObjectDataTableAdapter implements DataTableAdapter { throw new Error('Column not found'); } + if (resolver) { + return resolver(row, col); + } + const value = row.getValue(col.key); if (col.type === 'icon') { diff --git a/lib/process-services/src/lib/mock/process/process-instances-list.mock.ts b/lib/process-services/src/lib/mock/process/process-instances-list.mock.ts index 6032f8fe99..d409197cee 100644 --- a/lib/process-services/src/lib/mock/process/process-instances-list.mock.ts +++ b/lib/process-services/src/lib/mock/process/process-instances-list.mock.ts @@ -45,7 +45,12 @@ export let fakeProcessInstance = { graphicalNotationDefined: true, startFormDefined: false, suspended: false, - variables: [] + variables: [ + { + name: 'initiator', + value: 'fake-user-1' + } + ] }, { id: '2', @@ -70,7 +75,12 @@ export let fakeProcessInstance = { graphicalNotationDefined: true, startFormDefined: false, suspended: false, - variables: [] + variables: [ + { + name: 'initiator', + value: 'fake-user-2' + } + ] } ] }; diff --git a/lib/process-services/src/lib/process-list/components/process-list.component.html b/lib/process-services/src/lib/process-list/components/process-list.component.html index 92542adc9c..a5240f6ecb 100644 --- a/lib/process-services/src/lib/process-list/components/process-list.component.html +++ b/lib/process-services/src/lib/process-list/components/process-list.component.html @@ -6,6 +6,7 @@ [loading]="isLoading" [selectionMode]="selectionMode" [multiselect]="multiselect" + [resolverFn]="resolverFn" (rowClick)="onRowClick($event)" (row-keyup)="onRowKeyUp($event)"> diff --git a/lib/process-services/src/lib/process-list/components/process-list.component.spec.ts b/lib/process-services/src/lib/process-list/components/process-list.component.spec.ts index 026d60771e..64141937d3 100644 --- a/lib/process-services/src/lib/process-list/components/process-list.component.spec.ts +++ b/lib/process-services/src/lib/process-list/components/process-list.component.spec.ts @@ -22,7 +22,7 @@ import { By } from '@angular/platform-browser'; import { ProcessInstanceListComponent } from './process-list.component'; -import { AppConfigService, setupTestBed, CoreModule, DataTableModule } from '@alfresco/adf-core'; +import { AppConfigService, setupTestBed, CoreModule, DataTableModule, DataRow, DataColumn } from '@alfresco/adf-core'; import { DataRowEvent, ObjectDataRow, ObjectDataTableAdapter } from '@alfresco/adf-core'; import { fakeProcessInstance, fakeProcessInstancesWithNoName, fakeProcessInstancesEmpty } from '../../mock'; @@ -38,6 +38,13 @@ describe('ProcessInstanceListComponent', () => { let service: ProcessService; let getProcessInstancesSpy: jasmine.Spy; let appConfig: AppConfigService; + const resolverfn = (row: DataRow, col: DataColumn) => { + const value = row.getValue(col.key); + if (col.key === 'variables') { + return (value || []).map((processVar) => `${processVar.name} - ${processVar.value}`).toString(); + } + return value; + }; setupTestBed({ imports: [ @@ -271,6 +278,30 @@ describe('ProcessInstanceListComponent', () => { }); })); + it('should show custom resolved value in the column', async(() => { + appConfig.config['adf-process-list'] = { + 'presets': { + 'fakeProcessCustomSchema': [ + { + 'key': 'variables', + 'type': 'text', + 'title': 'Variables' + } + ] + } + }; + component.presetColumn = 'fakeProcessCustomSchema'; + component.resolverFn = resolverfn; + component.reload(); + + fixture.whenStable().then(() => { + fixture.detectChanges(); + const customColumn = fixture.debugElement.queryAll(By.css('[title="Variables"] adf-datatable-cell')); + expect(customColumn[0].nativeElement.innerText).toEqual('initiator - fake-user-1'); + expect(customColumn[1].nativeElement.innerText).toEqual('initiator - fake-user-2'); + }); + })); + describe('component changes', () => { beforeEach(() => { diff --git a/lib/process-services/src/lib/process-list/components/process-list.component.ts b/lib/process-services/src/lib/process-list/components/process-list.component.ts index fc5b1ccb6d..5f075bd000 100644 --- a/lib/process-services/src/lib/process-list/components/process-list.component.ts +++ b/lib/process-services/src/lib/process-list/components/process-list.component.ts @@ -20,7 +20,9 @@ import { DataRowEvent, DataTableAdapter, CustomEmptyContentTemplateDirective, - CustomLoadingContentTemplateDirective + CustomLoadingContentTemplateDirective, + DataRow, + DataColumn } from '@alfresco/adf-core'; import { AppConfigService, @@ -112,6 +114,13 @@ export class ProcessInstanceListComponent extends DataTableSchema implements On @Input() selectFirstRow: boolean = true; + /** + * Resolver function is used to show dynamic complex column objects + * see the docs to learn how to configure a resolverFn. + */ + @Input() + resolverFn: (row: DataRow, col: DataColumn) => any = null; + /** Emitted when a row in the process list is clicked. */ @Output() rowClick: EventEmitter = new EventEmitter();