diff --git a/docs/README.md b/docs/README.md index 04e3314c53..9ccce95db1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -67,7 +67,7 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | | [About component](core/about.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Shows a general version and status overview of the installed ADF library. | [Source](../lib/core/about/about.component.ts) | -| [Buttons menu component](core/buttons-menu.component.md) | Displays buttons on a responsive menu. | [Source](../lib/core/buttons-menu/buttons-menu.component.ts) | +| [Buttons menu component](core/buttons-menu.component.md) | Displays buttons on a responsive menu. | [Source](../lib/core/buttons-menu/buttons-menu.component.ts) | | [Card view component](core/card-view.component.md) | Displays a configurable property list renderer. | [Source](../lib/core/card-view/components/card-view/card-view.component.ts) | | [Comment list component](core/comment-list.component.md) | Shows a list of comments. | [Source](../lib/core/comments/comment-list.component.ts) | | [Comments component](core/comments.component.md) | Displays comments from users involved in a specified task or content and allows an involved user to add a comment to a task or a content. | [Source](../lib/core/comments/comments.component.ts) | @@ -76,8 +76,8 @@ for more information about installing and using the source code. | [Empty list component](core/empty-list.component.md) | Displays a message indicating that a list is empty. | [Source](../lib/core/datatable/components/datatable/empty-list.component.ts) | | [Form field component](core/form-field.component.md) | Represents a UI field in a form. | [Source](../lib/core/form/components/form-field/form-field.component.ts) | | [Form list component](core/form-list.component.md) | Shows forms as a list. | [Source](../lib/core/form/components/form-list.component.ts) | -| [Form component](core/form.component.md) | Shows a Form from APS | [Source](../lib/core/form/components/form.component.ts) | -| [Start form component](core/start-form.component.md) | Displays the Start Form for a process. | [Source](../lib/core/form/components/start-form.component.ts) | +| [Form component](core/form.component.md) | Shows a [`Form`](../../lib/process-services/task-list/models/form.model.ts) from APS | [Source](../lib/core/form/components/form.component.ts) | +| [Start form component](core/start-form.component.md) | Displays the Start [`Form`](../../lib/process-services/task-list/models/form.model.ts) for a process. | [Source](../lib/core/form/components/start-form.component.ts) | | [Text mask component](core/text-mask.component.md) | Implements text field input masks. | [Source](../lib/core/form/components/widgets/text/text-mask.component.ts) | | [Info drawer layout component](core/info-drawer-layout.component.md) | Displays a sidebar-style information panel. | [Source](../lib/core/info-drawer/info-drawer-layout.component.ts) | | [Info drawer component](core/info-drawer.component.md) | Displays a sidebar-style information panel with tabs. | [Source](../lib/core/info-drawer/info-drawer.component.ts) | @@ -95,7 +95,7 @@ for more information about installing and using the source code. | [Empty content component](core/empty-content.component.md) | Provides a generic "Empty Content" placeholder for components. | [Source](../lib/core/templates/empty-content/empty-content.component.ts) | | [Error content component](core/error-content.component.md) | Displays info about a specific error. | [Source](../lib/core/templates/error-content/error-content.component.ts) | | [Toolbar divider component](core/toolbar-divider.component.md) | Divides groups of elements in a Toolbar with a visual separator. | [Source](../lib/core/toolbar/toolbar-divider.component.ts) | -| [Toolbar title component](core/toolbar-title.component.md) | Supplies custom HTML to be included in a Toolbar component title. | [Source](../lib/core/toolbar/toolbar-title.component.ts) | +| [Toolbar title component](core/toolbar-title.component.md) | Supplies custom HTML to be included in a [Toolbar component](../core/toolbar.component.md) title. | [Source](../lib/core/toolbar/toolbar-title.component.ts) | | [Toolbar component](core/toolbar.component.md) | Simple container for headers, titles, actions and breadcrumbs. | [Source](../lib/core/toolbar/toolbar.component.ts) | | [User info component](core/user-info.component.md) | Shows user information. | [Source](../lib/core/userinfo/components/user-info.component.ts) | | [Viewer component](core/viewer.component.md) | Displays content from an ACS repository. | [Source](../lib/core/viewer/components/viewer.component.ts) | @@ -118,7 +118,7 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | -| [Form field model](core/form-field.model.md) | Contains the value and metadata for a field of a Form component. | [Source](../lib/core/form/components/widgets/core/form-field.model.ts) | +| [Form field model](core/form-field.model.md) | Contains the value and metadata for a field of a [`Form`](../../lib/process-services/task-list/models/form.model.ts) component. | [Source](../lib/core/form/components/widgets/core/form-field.model.ts) | | [Product version model](core/product-version.model.md) | Contains version and license information classes for Alfresco products. | [Source](../lib/core/models/product-version.model.ts) | | [User process model](core/user-process.model.md) | Represents a Process Services user. | [Source](../lib/core/models/user-process.model.ts) | | [Bpm user model](core/bpm-user.model.md) | Contains information about a Process Services user. | [Source](../lib/core/userinfo/models/bpm-user.model.ts) | @@ -130,23 +130,23 @@ for more information about installing and using the source code. | ---- | ----------- | ----------- | | [File size pipe](core/file-size.pipe.md) | Converts a number of bytes to the equivalent in KB, MB, etc. | [Source](../lib/core/pipes/file-size.pipe.ts) | | [Format space pipe](core/format-space.pipe.md) | Replaces all the white space in a string with a supplied character. | [Source](../lib/core/pipes/format-space.pipe.ts) | -| [Full name pipe](core/full-name.pipe.md) | Joins the first and last name properties from a UserProcessModel object into a single string. | [Source](../lib/core/pipes/full-name.pipe.ts) | +| [Full name pipe](core/full-name.pipe.md) | Joins the first and last name properties from a [`UserProcessModel`](../core/user-process.model.md) object into a single string. | [Source](../lib/core/pipes/full-name.pipe.ts) | | [Mime type icon pipe](core/mime-type-icon.pipe.md) | Retrieves an icon to represent a MIME type. | [Source](../lib/core/pipes/mime-type-icon.pipe.ts) | | [Node name tooltip pipe](core/node-name-tooltip.pipe.md) | Formats the tooltip for a Node. | [Source](../lib/core/pipes/node-name-tooltip.pipe.ts) | | [Text highlight pipe](core/text-highlight.pipe.md) | Adds highlighting to words or sections of text that match a search string. | [Source](../lib/core/pipes/text-highlight.pipe.ts) | | [Time ago pipe](core/time-ago.pipe.md) | Converts a recent past date into a number of days ago. | [Source](../lib/core/pipes/time-ago.pipe.ts) | -| [User initial pipe](core/user-initial.pipe.md) | Takes the name fields of a UserProcessModel object and extracts and formats the initials. | [Source](../lib/core/pipes/user-initial.pipe.ts) | +| [User initial pipe](core/user-initial.pipe.md) | Takes the name fields of a [`UserProcessModel`](../core/user-process.model.md) object and extracts and formats the initials. | [Source](../lib/core/pipes/user-initial.pipe.ts) | ## Services | Name | Description | Source link | | ---- | ----------- | ----------- | -| [Card item types service](core/card-item-types.service.md) | Maps type names to field component types for the Card View component. | [Source](../lib/core/card-view/services/card-item-types.service.ts) | -| [Card view update service](core/card-view-update.service.md) | Reports edits and clicks within fields of a Card View component. | [Source](../lib/core/card-view/services/card-view-update.service.ts) | +| [Card item types service](core/card-item-types.service.md) | Maps type names to field component types for the [Card View component](../core/card-view.component.md). | [Source](../lib/core/card-view/services/card-item-types.service.ts) | +| [Card view update service](core/card-view-update.service.md) | Reports edits and clicks within fields of a [Card View component](../core/card-view.component.md). | [Source](../lib/core/card-view/services/card-view-update.service.ts) | | [Activiti alfresco service](core/activiti-alfresco.service.md) | Gets Alfresco Repository folder content based on a Repository account configured in Alfresco Process Services (APS). | [Source](../lib/core/form/services/activiti-alfresco.service.ts) | -| [Form rendering service](core/form-rendering.service.md) | Maps a form field type string onto the corresponding form widget component type. | [Source](../lib/core/form/services/form-rendering.service.ts) | +| [Form rendering service](core/form-rendering.service.md) | Maps a form field type string onto the corresponding form [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) component type. | [Source](../lib/core/form/services/form-rendering.service.ts) | | [Form service](core/form.service.md) | Implements Process Services form methods | [Source](../lib/core/form/services/form.service.ts) | -| [Node service](core/node.service.md) | Gets Alfresco Repository node metadata and creates nodes with metadata. | [Source](../lib/core/form/services/node.service.ts) | +| [Node service](core/node.service.md) | Gets Alfresco Repository node metadata and creates nodes with metadata. | [Source](../lib/core/form/services/node.service.ts) | | [Process content service](core/process-content.service.md) | Manipulates content related to a Process Instance or Task Instance in APS. | [Source](../lib/core/form/services/process-content.service.ts) | | [Alfresco api service](core/alfresco-api.service.md) | Provides access to an initialized **AlfrescoJSApi** instance. | [Source](../lib/core/services/alfresco-api.service.ts) | | [Apps process service](core/apps-process.service.md) | Gets details of the Process Services apps that are deployed for the user. | [Source](../lib/core/services/apps-process.service.ts) | @@ -167,7 +167,7 @@ for more information about installing and using the source code. | [Nodes api service](core/nodes-api.service.md) | Accesses and manipulates ACS document nodes using their node IDs. | [Source](../lib/core/services/nodes-api.service.ts) | | [Notification service](core/notification.service.md) | Shows a notification message with optional feedback. | [Source](../lib/core/services/notification.service.ts) | | [Page title service](core/page-title.service.md) | Sets the page title. | [Source](../lib/core/services/page-title.service.ts) | -| [People content service](core/people-content.service.md) | Gets information about a Content Services user. | [Source](../lib/core/services/people-content.service.ts) | +| [People content service](core/people-content.service.md) | Gets information about a Content Services user. | [Source](../lib/core/services/people-content.service.ts) | | [People process service](core/people-process.service.md) | Gets information about Process Services users. | [Source](../lib/core/services/people-process.service.ts) | | [Renditions service](core/renditions.service.md) ![Deprecated](docassets/images/DeprecatedIcon.png) | Manages prearranged conversions of content to different formats. | [Source](../lib/core/services/renditions.service.ts) | | [Search configuration service](core/search-configuration.service.md) | Provides fine control of parameters to a search. | [Source](../lib/core/services/search-configuration.service.ts) | @@ -181,9 +181,9 @@ for more information about installing and using the source code. | [User preferences service](core/user-preferences.service.md) | Stores preferences for the app and for individual components. | [Source](../lib/core/services/user-preferences.service.ts) | | [Bpm user service](core/bpm-user.service.md) | Gets information about the current Process Services user. | [Source](../lib/core/userinfo/services/bpm-user.service.ts) | | [Ecm user service](core/ecm-user.service.md) | Gets information about a Content Services user. | [Source](../lib/core/userinfo/services/ecm-user.service.ts) | -| _Download zip service_ | _Not currently documented_ | [Source](../lib/core/services/download-zip.service.ts) | -| _Jwt helper service_ | _Not currently documented_ | [Source](../lib/core/services/jwt-helper.service.ts) | -| _Identity user service_ | _Not currently documented_ | [Source](../lib/core/userinfo/services/identity-user.service.ts) | +| _[Download zip service](../../lib/core/services/download-zip.service.ts)_ | _Not currently documented_ | [Source](../lib/core/services/download-zip.service.ts) | +| _[Jwt helper service](../../lib/core/services/jwt-helper.service.ts)_ | _Not currently documented_ | [Source](../lib/core/services/jwt-helper.service.ts) | +| _[`Identity`](../../e2e/actions/APS-cloud/identity.ts) user service_ | _Not currently documented_ | [Source](../lib/core/userinfo/services/identity-user.service.ts) | ## Widgets @@ -228,17 +228,17 @@ for more information about installing and using the source code. | [Add permission panel component](content-services/add-permission-panel.component.md) | Searches for people or groups to add to the current node permissions. | [Source](../lib/content-services/permission-manager/components/add-permission/add-permission-panel.component.ts) | | [Add permission component](content-services/add-permission.component.md) | Searches for people or groups to add to the current node permissions. | [Source](../lib/content-services/permission-manager/components/add-permission/add-permission.component.ts) | | [Permission list component](content-services/permission-list.component.md) | Shows node permissions as a table. | [Source](../lib/content-services/permission-manager/components/permission-list/permission-list.component.ts) | -| [Search check list component](content-services/search-check-list.component.md) | Implements a checklist widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-check-list/search-check-list.component.ts) | +| [Search check list component](content-services/search-check-list.component.md) | Implements a checklist [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-check-list/search-check-list.component.ts) | | [Search chip list component](content-services/search-chip-list.component.md) | Displays search criteria as a set of "chips". | [Source](../lib/content-services/search/components/search-chip-list/search-chip-list.component.ts) | | [Search control component](content-services/search-control.component.md) | Displays a input text that shows find-as-you-type suggestions. | [Source](../lib/content-services/search/components/search-control.component.ts) | -| [Search date range component](content-services/search-date-range.component.md) | Implements a date range widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-date-range/search-date-range.component.ts) | +| [Search date range component](content-services/search-date-range.component.md) | Implements a date range [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-date-range/search-date-range.component.ts) | | [Search filter component](content-services/search-filter.component.md) | Represents a main container component for custom search and faceted search settings. | [Source](../lib/content-services/search/components/search-filter/search-filter.component.ts) | -| [Search number range component](content-services/search-number-range.component.md) | Implements a number range widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-number-range/search-number-range.component.ts) | -| [Search radio component](content-services/search-radio.component.md) | Implements a radio button list widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-radio/search-radio.component.ts) | -| [Search slider component](content-services/search-slider.component.md) | Implements a numeric slider widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-slider/search-slider.component.ts) | +| [Search number range component](content-services/search-number-range.component.md) | Implements a number range [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-number-range/search-number-range.component.ts) | +| [Search radio component](content-services/search-radio.component.md) | Implements a radio button list [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-radio/search-radio.component.ts) | +| [Search slider component](content-services/search-slider.component.md) | Implements a numeric slider [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-slider/search-slider.component.ts) | | [Search sorting picker component](content-services/search-sorting-picker.component.md) | Provides an ability to select one of the predefined sorting definitions for search results: | [Source](../lib/content-services/search/components/search-sorting-picker/search-sorting-picker.component.ts) | -| [Search text component](content-services/search-text.component.md) | Implements a text input widget for the Search Filter component. | [Source](../lib/content-services/search/components/search-text/search-text.component.ts) | -| [Search component](content-services/search.component.md) | Searches items for supplied search terms. | [Source](../lib/content-services/search/components/search.component.ts) | +| [Search text component](content-services/search-text.component.md) | Implements a text input [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) for the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-text/search-text.component.ts) | +| [Search component](content-services/search.component.md) | Searches items for supplied search terms. | [Source](../lib/content-services/search/components/search.component.ts) | | [Sites dropdown component](content-services/sites-dropdown.component.md) | Displays a dropdown menu to show and interact with the sites of the current user. | [Source](../lib/content-services/site-dropdown/sites-dropdown.component.ts) | | [Like component](content-services/like.component.md) | Allows a user to add "likes" to an item. | [Source](../lib/content-services/social/like.component.ts) | | [Rating component](content-services/rating.component.md) | Allows a user to add ratings to an item. | [Source](../lib/content-services/social/rating.component.ts) | @@ -250,7 +250,7 @@ for more information about installing and using the source code. | [Upload button component](content-services/upload-button.component.md) | Activates a file upload. | [Source](../lib/content-services/upload/components/upload-button.component.ts) | | [Upload drag area component](content-services/upload-drag-area.component.md) | Adds a drag and drop area to upload files to ACS. | [Source](../lib/content-services/upload/components/upload-drag-area.component.ts) | | [Upload version button component](content-services/upload-version-button.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Activates a file version upload. | [Source](../lib/content-services/upload/components/upload-version-button.component.ts) | -| [Version list component](content-services/version-list.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Displays the version history of a node in a Version Manager component. | [Source](../lib/content-services/version-manager/version-list.component.ts) | +| [Version list component](content-services/version-list.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Displays the version history of a node in a [Version Manager component](../content-services/version-manager.component.md). | [Source](../lib/content-services/version-manager/version-list.component.ts) | | [Version manager component](content-services/version-manager.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Displays the version history of a node with the ability to upload a new version. | [Source](../lib/content-services/version-manager/version-manager.component.ts) | | [Webscript component](content-services/webscript.component.md) | Provides access to Webscript features. | [Source](../lib/content-services/webscript/webscript.component.ts) | @@ -284,12 +284,12 @@ for more information about installing and using the source code. | ---- | ----------- | ----------- | | [Content node dialog service](content-services/content-node-dialog.service.md) | Displays and manages dialogs for selecting content to open, copy or upload. | [Source](../lib/content-services/content-node-selector/content-node-dialog.service.ts) | | [Custom resources service](content-services/custom-resources.service.md) | Manages Document List information that is specific to a user. | [Source](../lib/content-services/document-list/services/custom-resources.service.ts) | -| [Document actions service](content-services/document-actions.service.md) | Implements the document menu actions for the Document List component. | [Source](../lib/content-services/document-list/services/document-actions.service.ts) | -| [Document list service](content-services/document-list.service.md) | Implements node operations used by the Document List component. | [Source](../lib/content-services/document-list/services/document-list.service.ts) | -| [Folder actions service](content-services/folder-actions.service.md) | Implements the folder menu actions for the Document List component. | [Source](../lib/content-services/document-list/services/folder-actions.service.ts) | +| [Document actions service](content-services/document-actions.service.md) | Implements the document menu actions for the [Document List component](../content-services/document-list.component.md). | [Source](../lib/content-services/document-list/services/document-actions.service.ts) | +| [Document list service](content-services/document-list.service.md) | Implements node operations used by the [Document List component](../content-services/document-list.component.md). | [Source](../lib/content-services/document-list/services/document-list.service.ts) | +| [Folder actions service](content-services/folder-actions.service.md) | Implements the folder menu actions for the [Document List component](../content-services/document-list.component.md). | [Source](../lib/content-services/document-list/services/folder-actions.service.ts) | | [Node permission dialog service](content-services/node-permission-dialog.service.md) | Displays dialogs to let the user set node permissions. | [Source](../lib/content-services/permission-manager/services/node-permission-dialog.service.ts) | | [Node permission service](content-services/node-permission.service.md) | Manages role permissions for content nodes. | [Source](../lib/content-services/permission-manager/services/node-permission.service.ts) | -| [Search filter service](content-services/search-filter.service.md) | Registers widgets for use with the Search Filter component. | [Source](../lib/content-services/search/components/search-filter/search-filter.service.ts) | +| [Search filter service](content-services/search-filter.service.md) | Registers widgets for use with the [Search Filter component](../content-services/search-filter.component.md). | [Source](../lib/content-services/search/components/search-filter/search-filter.service.ts) | | [Search query builder service](content-services/search-query-builder.service.md) | Stores information from all the custom search and faceted search widgets, compiles and runs the final search query. | [Source](../lib/content-services/search/search-query-builder.service.ts) | | [Rating service](content-services/rating.service.md) | Manages ratings for items in Content Services. | [Source](../lib/content-services/social/services/rating.service.ts) | | [Tag service](content-services/tag.service.md) | Manages tags in Content Services. | [Source](../lib/content-services/tag/services/tag.service.ts) | @@ -352,9 +352,9 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | -| [Process filter service](process-services/process-filter.service.md) | Manage Process Filters, which are pre-configured Process Instance queries. | [Source](../lib/process-services/process-list/services/process-filter.service.ts) | -| [Process service](process-services/process.service.md) | Manages Process Instances, Process Variables, and Process Audit Log. | [Source](../lib/process-services/process-list/services/process.service.ts) | -| [Task filter service](process-services/task-filter.service.md) | Manage Task Filters, which are pre-configured Task Instance queries. | [Source](../lib/process-services/task-list/services/task-filter.service.ts) | +| [Process filter service](process-services/process-filter.service.md) | Manage Process Filters, which are pre-configured Process Instance queries. | [Source](../lib/process-services/process-list/services/process-filter.service.ts) | +| [Process service](process-services/process.service.md) | Manages Process Instances, Process Variables, and Process Audit Log. | [Source](../lib/process-services/process-list/services/process.service.ts) | +| [Task filter service](process-services/task-filter.service.md) | Manage Task Filters, which are pre-configured Task Instance queries. | [Source](../lib/process-services/task-list/services/task-filter.service.ts) | | [Tasklist service](process-services/tasklist.service.md) | Manages Task Instances. | [Source](../lib/process-services/task-list/services/tasklist.service.ts) | @@ -375,25 +375,26 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | | [App list cloud component](process-services-cloud/app-list-cloud.component.md) | Shows all deployed cloud application instances. | [Source](../lib/process-services-cloud/src/lib/app-list-cloud/components/app-list-cloud.component.ts) | +| [Edit process filter cloud component](process-services-cloud/edit-process-filter-cloud.component.md) | Shows Process Filter Details. | [Source](../lib/process-services-cloud/src/lib/process-cloud/process-filters-cloud/edit-process-filter-cloud.component.ts) | | [Process filters cloud component](process-services-cloud/process-filters-cloud.component.md) | Lists all available process filters and allows to select a filter. | [Source](../lib/process-services-cloud/src/lib/process-cloud/process-filters-cloud/process-filters-cloud.component.ts) | | [Process list cloud component](process-services-cloud/process-list-cloud.component.md) | Renders a list containing all the process instances matched by the parameters specified. | [Source](../lib/process-services-cloud/src/lib/process-list-cloud/components/process-list-cloud.component.ts) | | [Start task cloud component](process-services-cloud/start-task-cloud.component.md) | Creates/Starts new task for the specified app | [Source](../lib/process-services-cloud/src/lib/start-task-cloud/components/start-task-cloud.component.ts) | | [Edit task filter cloud component](process-services-cloud/edit-task-filter-cloud.component.md) | Shows Task Filter Details. | [Source](../lib/process-services-cloud/src/lib/task-cloud/task-filters-cloud/edit-task-filter-cloud.component.ts) | | [Task filters cloud component](process-services-cloud/task-filters-cloud.component.md) | Shows all available filters. | [Source](../lib/process-services-cloud/src/lib/task-cloud/task-filters-cloud/task-filters-cloud.component.ts) | | [Task list cloud component](process-services-cloud/task-list-cloud.component.md) | Renders a list containing all the tasks matched by the parameters specified. | [Source](../lib/process-services-cloud/src/lib/task-list-cloud/components/task-list-cloud.component.ts) | -| _App details cloud component_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/app-list-cloud/components/app-details-cloud.component.ts) | -| _People cloud component_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/start-task-cloud/components/people-cloud/people-cloud.component.ts) | +| _[App details cloud component](../../lib/process-services-cloud/src/lib/app-list-cloud/components/app-details-cloud.component.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/app-list-cloud/components/app-details-cloud.component.ts) | +| _[People cloud component](../../lib/process-services-cloud/src/lib/start-task-cloud/components/people-cloud/people-cloud.component.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/start-task-cloud/components/people-cloud/people-cloud.component.ts) | ## Services | Name | Description | Source link | | ---- | ----------- | ----------- | -| _Apps process cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/app-list-cloud/services/apps-process-cloud.service.ts) | -| _Process filter cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/process-cloud/services/process-filter-cloud.service.ts) | -| _Process list cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/process-list-cloud/services/process-list-cloud.service.ts) | -| _Start task cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/start-task-cloud/services/start-task-cloud.service.ts) | -| _Task filter cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/task-cloud/services/task-filter-cloud.service.ts) | -| _Task list cloud service_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/task-list-cloud/services/task-list-cloud.service.ts) | +| _[Apps process cloud service](../../lib/process-services-cloud/src/lib/app-list-cloud/services/apps-process-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/app-list-cloud/services/apps-process-cloud.service.ts) | +| _[Process filter cloud service](../../lib/process-services-cloud/src/lib/process-cloud/services/process-filter-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/process-cloud/services/process-filter-cloud.service.ts) | +| _[Process list cloud service](../../lib/process-services-cloud/src/lib/process-list-cloud/services/process-list-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/process-list-cloud/services/process-list-cloud.service.ts) | +| _[Start task cloud service](../../lib/process-services-cloud/src/lib/start-task-cloud/services/start-task-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/start-task-cloud/services/start-task-cloud.service.ts) | +| _[Task filter cloud service](../../lib/process-services-cloud/src/lib/task-cloud/services/task-filter-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/task-cloud/services/task-filter-cloud.service.ts) | +| _[Task list cloud service](../../lib/process-services-cloud/src/lib/task-list-cloud/services/task-list-cloud.service.ts)_ | _Not currently documented_ | [Source](../lib/process-services-cloud/src/lib/task-list-cloud/services/task-list-cloud.service.ts) | @@ -412,15 +413,13 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | -| _Dynamic component_ | _Not currently documented_ | [Source](../lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts) | -| _Dynamic tab component_ | _Not currently documented_ | [Source](../lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts) | +| [Dynamic component](extensions/dynamic.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Displays dynamically-loaded extension components. | [Source](../lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts) | ## Services | Name | Description | Source link | | ---- | ----------- | ----------- | -| _Extension loader service_ | _Not currently documented_ | [Source](../lib/extensions/src/lib/services/extension-loader.service.ts) | -| _Extension service_ | _Not currently documented_ | [Source](../lib/extensions/src/lib/services/extension.service.ts) | +| [Extension service](extensions/extension.service.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Manages and runs basic extension functionality. | [Source](../lib/extensions/src/lib/services/extension.service.ts) | @@ -439,7 +438,7 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | -| [Widget component](insights/widget.component.md) | Base class for standard and custom widget classes. | [Source](../lib/insights/analytics-process/components/widgets/widget.component.ts) | +| [Widget component](insights/widget.component.md) | Base class for standard and custom [widget](../../e2e/pages/adf/process_services/widgets/widget.ts) classes. | [Source](../lib/insights/analytics-process/components/widgets/widget.component.ts) | | [Analytics generator component](insights/analytics-generator.component.md) | Generates and shows charts | [Source](../lib/insights/analytics-process/components/analytics-generator.component.ts) | | [Analytics report list component](insights/analytics-report-list.component.md) | Shows a list of all available reports | [Source](../lib/insights/analytics-process/components/analytics-report-list.component.ts) | | [Analytics component](insights/analytics.component.md) | Shows the charts related to the reportId passed as input | [Source](../lib/insights/analytics-process/components/analytics.component.ts) | diff --git a/docs/extensions/README.md b/docs/extensions/README.md index 18869aa949..a084157e61 100644 --- a/docs/extensions/README.md +++ b/docs/extensions/README.md @@ -16,14 +16,13 @@ for more information about installing and using the source code. | Name | Description | Source link | | ---- | ----------- | ----------- | -| _Dynamic component_ | _Not currently documented_ | [Source](../../lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts) | -| _Dynamic tab component_ | _Not currently documented_ | [Source](../../lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts) | +| [Dynamic component](dynamic.component.md) ![Experimental](../docassets/images/ExperimentalIcon.png) | Displays dynamically-loaded extension components. | [Source](../../lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts) | +| [Dynamic tab component](dynamic-tab.component.md) ![Experimental](../docassets/images/ExperimentalIcon.png) | Displays dynamically-loaded extensions with tabs. | [Source](../../lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts) | ## Services | Name | Description | Source link | | ---- | ----------- | ----------- | -| _Extension loader service_ | _Not currently documented_ | [Source](../../lib/extensions/src/lib/services/extension-loader.service.ts) | -| _Extension service_ | _Not currently documented_ | [Source](../../lib/extensions/src/lib/services/extension.service.ts) | +| [Extension service](extension.service.md) ![Experimental](../docassets/images/ExperimentalIcon.png) | Manages and runs basic extension functionality. | [Source](../../lib/extensions/src/lib/services/extension.service.ts) | diff --git a/docs/extensions/dynamic-tab.component.md b/docs/extensions/dynamic-tab.component.md new file mode 100644 index 0000000000..29b4132b10 --- /dev/null +++ b/docs/extensions/dynamic-tab.component.md @@ -0,0 +1,18 @@ +--- +Title: Dynamic Tab Component +Added: v3.0.0 +Status: Experimental +Last reviewed: 2018-12-17 +--- + +# [Dynamic Tab Component](../../lib/core/about/about.component.ts "Defined in about.component.ts") + +Displays dynamically-loaded extensions with tabs. + +## Class members + +## Details + +## See also + +- Dynamic component diff --git a/docs/extensions/dynamic.component.md b/docs/extensions/dynamic.component.md new file mode 100644 index 0000000000..0e139a3556 --- /dev/null +++ b/docs/extensions/dynamic.component.md @@ -0,0 +1,58 @@ +--- +Title: Dynamic Component +Added: v3.0.0 +Status: Experimental +Last reviewed: 2018-12-17 +--- + +# [Dynamic Component](../../lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts "Defined in dynamic.component.ts") + +Displays dynamically-loaded extension components. + +## Class members + +### Properties + +| Name | Type | Default value | Description | +| ---- | ---- | ------------- | ----------- | +| data | `any` | | Data for the dynamically-loaded component instance. | +| id | `string` | | Unique ID string for the component to show. | + +## Details + +Use the Dynamic component to create extensible apps +(ie, apps that provide a generalized UI structure where the specific content +can be "plugged in" by other developers). The `id` property refers to a +component that has previously been registered using the `setComponents` method +of the [Extension service](../../lib/extensions/src/lib/services/extension.service.ts): + +```ts +// Registering the extension components. +extensionService.setComponents({ + 'plugInName.components.docList': DocumentListComponent. + 'plugInName.components.login': LoginComponent, + ... +}); +``` + +```html + + + +``` + +Use this to provide the extension developer with a standard layout that +contains placeholders defined by instances of the Dynamic component. The +developer can then register any desired components to correspond to the +defined component IDs. For example, the extensible app might be shipped +with the standard [Document List component](../content-services/document-list.component.md) registered against `plugInName.components.docList`. +The extension developer can replace this with a custom class +simply by registering that class with `setComponents` before use. + +## See also + +- [Extension service](../../lib/extensions/src/lib/services/extension.service.ts) +- [Dynamic tab component](../../lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts) diff --git a/docs/extensions/extension.service.md b/docs/extensions/extension.service.md new file mode 100644 index 0000000000..a1e5f81af0 --- /dev/null +++ b/docs/extensions/extension.service.md @@ -0,0 +1,69 @@ +--- +Title: Extension Service +Added: v3.0.0 +Status: Experimental +Last reviewed: 2018-12-17 +--- + +# [Extension Service](../../lib/extensions/src/lib/services/extension.service.ts "Defined in extension.service.ts") + +Manages and runs basic extension functionality. + +## Class members + +### Methods + +- **evaluateRule**(ruleId: `string`, context: [`RuleContext`](../../lib/extensions/src/lib/config/rule.extensions.ts)): `boolean`
+ Evaluates a rule. + - _ruleId:_ `string` - ID of the rule to evaluate + - _context:_ [`RuleContext`](../../lib/extensions/src/lib/config/rule.extensions.ts) - Parameter object for the evaluator with details of app state + - **Returns** `boolean` - True if the rule passed, false otherwise +- **getActionById**(id: `string`): [`ActionRef`](../../lib/extensions/src/lib/config/action.extensions.ts)
+ Retrieves an action using its ID value. + - _id:_ `string` - The ID value to look for + - **Returns** [`ActionRef`](../../lib/extensions/src/lib/config/action.extensions.ts) - Action or null if not found +- **getAuthGuards**(ids: `string[]`): `Array>`
+ Retrieves one or more auth guards using an array of ID values. + - _ids:_ `string[]` - Array of ID value to look for + - **Returns** `Array>` - Array of auth guards or empty array if none were found +- **getComponentById**(id: `string`): `Type<>`
+ Retrieves a registered [extension component](../../lib/extensions/src/lib/services/component-register.service.ts) using its ID value. + - _id:_ `string` - The ID value to look for + - **Returns** `Type<>` - The component or null if not found +- **getEvaluator**(key: `string`): `RuleEvaluator`
+ Retrieves a RuleEvaluator function using its key name. + - _key:_ `string` - Key name to look for + - **Returns** `RuleEvaluator` - RuleEvaluator or null if not found +- **getRouteById**(id: `string`): [`RouteRef`](../../lib/extensions/src/lib/config/routing.extensions.ts)
+ Retrieves a route using its ID value. + - _id:_ `string` - The ID value to look for + - **Returns** [`RouteRef`](../../lib/extensions/src/lib/config/routing.extensions.ts) - The route or null if not found +- **getRuleById**(id: `string`): [`RuleRef`](../../lib/extensions/src/lib/config/rule.extensions.ts)
+ Retrieves a rule using its ID value. + - _id:_ `string` - The ID value to look for + - **Returns** [`RuleRef`](../../lib/extensions/src/lib/config/rule.extensions.ts) - The rule or null if not found +- **load**(): [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`ExtensionConfig`](../../lib/extensions/src/lib/config/extension.config.ts)`>`
+ Loads and registers an extension config file and plugins (specified by path properties). + - **Returns** [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)`<`[`ExtensionConfig`](../../lib/extensions/src/lib/config/extension.config.ts)`>` - The loaded config data +- **runExpression**(value: `string`, context?: `any`): `any`
+ Runs a lightweight expression stored in a string. + - _value:_ `string` - String containing the expression or literal value + - _context:_ `any` - (Optional) Parameter object for the expression with details of app state + - **Returns** `any` - Result of evaluated expression, if found, or the literal value otherwise +- **setAuthGuards**(values: `Function`)
+ Adds one or more new auth guards to the existing set. + - _values:_ `Function` - The new auth guards to add +- **setComponents**(values: `Function`)
+ Adds one or more new components to the existing set. + - _values:_ `Function` - The new components to add +- **setEvaluators**(values: `Function`)
+ Adds one or more new rule evaluators to the existing set. + - _values:_ `Function` - The new evaluators to add +- **setup**(config: [`ExtensionConfig`](../../lib/extensions/src/lib/config/extension.config.ts))
+ Registers extensions from a config object. + - _config:_ [`ExtensionConfig`](../../lib/extensions/src/lib/config/extension.config.ts) - Object with config data + +## Details + +Use the methods of this service to add extensibility features to your app. You can find further +details in the [App extensions](../user-guide/app-extensions.md) page. diff --git a/docs/user-guide/README.md b/docs/user-guide/README.md index a0425ccfd4..240543ebe8 100644 --- a/docs/user-guide/README.md +++ b/docs/user-guide/README.md @@ -13,6 +13,7 @@ on an item below to see the corresponding guide page. - [Angular Material Design](angular-material-design.md) - [Form Extensibility and Customisation](extensibility.md) - [Internationalization in ADF](internationalization.md) +- [App extensions](app-extensions.md) - [Theming](theming.md) - [Transclusion](transclusion.md) - [Typography](typography.md) diff --git a/docs/user-guide/app-extensions.md b/docs/user-guide/app-extensions.md new file mode 100644 index 0000000000..6beee65f68 --- /dev/null +++ b/docs/user-guide/app-extensions.md @@ -0,0 +1,276 @@ +--- +Title: App extensions +Added: 3.0.0 +--- + +# App extensions + +ADF lets you simplify the app developer's task by providing an **extensible app** +as a starting point. + +An extensible app is designed with _extension points_, which are +placeholders where components and other content +can be "plugged in" to provide functionality. The app may be supplied with +default content for the extension points but the idea is that a developer can +easily replace this with custom content as necessary. An organization might find this +useful, for example, if they want to create a family of apps with consistent +appearance and behavior. One developer can produce an extensible app that +can then be adapted by other developers to create the various apps in the +family. + +## Contents + +- [Extension points](#extension-points) +- [Extensibility features](#extensibility-features) +- [Setting up an app for extensibility](#setting-up-an-app-for-extensibility) +- [Creating extensions](#creating-extensions) + - [Routes](#routes) + - [Actions](#actions) + - [Rules](#rules) + - [Features](#features) + +## Extension points + +A pluggable extension is implemented by a class or data object that provides +its functionality. The class or object is then registered in the app with a +key/ID string that is used to reference it. The general idea is that only the +ID string is used directly in the main app code to designate the extension point, +while the actual implementation is loaded and registered separately. In this respect, +extension points work somewhat like +[translation keys](internationalization.md) - the key is used to mark +a place in the app where the actual content will be supplied dynamically. + +## Extensibility features + +ADF provides a number of features that offer extension points or help +with extensibility in general: + +- **Components**: The [Dynamic component](../extensions/dynamic.component.md) and Dynamic Tab component + have no content of their own but they have an `id` property that + references a registered component extension ID. The referenced component + will be added as a child of the Dynamic component at runtime. +- **Routes**: These are registered as key/ID strings that resolve to standard + Angular routes. This feature can be used, say, that a click on a list item + should send the user _somewhere_ but leave the actual destination up to the + developer. +- **Auth guards**: Routes can be protected by auth guards + to prevent unauthorized users from accessing pages they shouldn't see. +- **Rules**: These are tests that produce a boolean result depending on the app state. + The extensible app can use them with _features_ or `ngIf` directives, for example, to show or + hide content in certain conditions. The exact conditions, however, are chosen + by the developer who extends the app. +- **Actions**: The extensible app can define a set of **application actions** that + perform basic operations in the app. These are each referenced by a unique key + string and can take a data value as a parameter. Items from this set can then + be referenced by extension actions. These contain their own key/ID string along + with the name of an application action to trigger and a "payload" value to pass + as a parameter. The payload can either be a string (to represent a static message, + say) or an expression that calculates a result from app state. The expression could, + for example, return the current user's name, the currently selected list item or a + string composed from several data items. +- **Features**: What counts as a "feature" varies according to the application but + it is intended to mean any salient piece of functionality that can be + customized by extensions. For example, a toolbar, navigation bar, + login page or tools menu might all be regarded as features. Any of these + features could be extended in a variety of ways. A menu, say, might support custom + commands that are implemented by actions with each command enabled or disabled + depending on the value returned by a rule. + +## Setting up an app for extensibility + +You can register component classes for use with the [Dynamic component](../extensions/dynamic.component.md) +or Dynamic Tab component using the `setComponents` method of the +[Extension service](../extensions/extension.service.md) (see the Dynamic component page for further details +and code samples). The service also has `setAuthGuards` and +`setEvaluators` methods that behave analogously. + +The recommended way to provide the set of application actions (ie, the built-in +actions that can be referenced by extension actions) is to use the scheme +defined by [@ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510). +Briefly, the idea is that all app state is stored centrally and +can only be updated by functions triggered by named command strings (eg, "ADD_USER", +"CLEAR_SELECTION", "NEW_DOCUMENT", etc). ADF's extensibility features are designed +to fit in neatly with @ngrx/store but it has many other advantages, as described on +the website. + +## Creating extensions + +The set of basic classes, evaluators and actions provided by the app can be used to set up extensions. +The easiest way to configure the extension functionality is with an extension config +file. The structure of this file (in JSON format) follows the basic pattern shown +below: + +```json +{ + "$id": "unique.id", + "$name": "extension.name", + "$version": "1.0.0", + "$vendor": "author.name", + "$license": "license", + "$runtime": "1.5.0", + "$description": "some description", + + "routes": [ ... ], + "actions": [ ... ], + "rules": [ ... ], + "features": { ... } +} +``` + +You can use the `load` method of the [Extension service](../extensions/extension.service.md) to read the file into a +convenient object that implements the [`ExtensionConfig`](../../lib/extensions/src/lib/config/extension.config.ts) and [`ExtensionRef`](../../lib/extensions/src/lib/config/extension.config.ts) interfaces. +Note that the `extension.schema.json` file contains a [JSON schema](http://json-schema.org/) +that allows for format checking and also text completion in some editors. + +### Routes + +The `routes` array in the config contains objects like those shown in the +following example: + +```json +"routes": [ + { + "id": "plugin1.routes.customTrash", + "path": "ext/customtrash", + "component": "yourCustomTrash.component.id", + "layout": "app.layout.main", + "auth": ["app.auth"], + "data": { + "title": "Custom Trashcan" + } + }, + ... + ] +``` + +You can access routes from the config using the `getRouteById` method of the +[Extension service,](../extensions/extension.service.md) which returns a [`RouteRef`](../../lib/extensions/src/lib/config/routing.extensions.ts) object. Note that the references +to the component and auth guards are extension IDs, +[as described above](#extension-points). + +### Actions + +The `actions` array has the following structure: + +```json + "actions": [ + { + "id": "plugin1.actions.settings", + "type": "NAVIGATE_URL", + "payload": "/settings" + }, + { + "id": "plugin1.actions.info", + "type": "SNACKBAR_INFO", + "payload": "I'm a nice little popup raised by extension." + }, + { + "id": "plugin1.actions.node-name", + "type": "SNACKBAR_INFO", + "payload": "$('Action for ' + context.selection.first.entry.name)" + }, + ... + ] +``` + +The [Extension service](../extensions/extension.service.md) defines a `getActionById` method that returns an +`ActionRef` object corresponding to an item from this array. + +The `type` property refers to an action type that must be provided by the +app (eg, the "SNACKBAR_INFO" in the example presumably just shows a standard snackbar +message). + +By default, the `payload` is just an ordinary string that can be used for +a message, URL or other static text data. However, you can also define a +JavaScript expression here by surrounding it with `$( ... )`. The expression +has access to an object named `context` which typically contains information +about the app state. You can supply the object that contains this data via the +`runExpression` method of the [Extension service,](../extensions/extension.service.md) which actually evaluates the +expression. Note that the result of the expression doesn't necessarily +have to be a string. + +### Rules + +The simplest type of rule is configured as shown below: + +```json +"rules": [ + { + "id": "app.trashcan", + "type": "app.navigation.isTrashcan" + }, + ... + ] +``` + +The `type` is the ID of a `RuleEvaluator` function that has been registered using +the `setEvaluators` method of the [Extension service](../extensions/extension.service.md). +The evaluator is a boolean function that represents whether a certain +condition is true or false (eg, whether an item is selected, whether the user +has certain options enabled, etc). The evaluator has access to a context object +that is supplied from the app during the call to `evaluateRule` (defined in +the Extension service). + +A more complex rule can take other rules as parameters: + +```json +"rules": [ + { + "id": "app.toolbar.favorite.canAdd", + "type": "core.every", + "parameters": [ + { "type": "rule", "value": "app.selection.canAddFavorite" }, + { "type": "rule", "value": "app.navigation.isNotRecentFiles" }, + { "type": "rule", "value": "app.navigation.isNotSharedFiles" }, + { "type": "rule", "value": "app.navigation.isNotSearchResults" } + ] + } + ] +``` + +This is mainly useful for creating "metarules" that require certain +relationships to hold among the parameter rules. A few useful metarules +are defined in the +[core.evaluators.ts](../lib/extensions/evaluators/core.evaluators.ts) file: + +- `every`: Returns true only if all the parameter rules return true +- `some`: Returns true if one or more of the parameter rules return true +- `not`: Returns true only if all the parameter rules return false + +Note that parameter rules can also recursively invoke their own rules, etc. + +### Features + +The `features` object does not have any defined structure but the intention +is that each key in the object corresponds to the name of a salient feature +of the app that can be extended. The object or array that matches the key +name contains parameters that modify the behavior of the feature, possibly +using actions, rules, etc, defined elsewhere in the config. Suppose, for +example, the app has a tools menu that can be extended with extra commands. +The properties for a new command might include: + +- The title shown in the menu +- An icon shown next to the title +- The action that is activated when the command is selected +- A rule that determines whether or not the command is enabled + +A `features` object to add an extra item to this menu might look like +the following: + +```json +"features": { + "toolmenu": [ + { + "id": "app.toolmenu.givebiscuit", + "title": "Give a biscuit to the selected user", + "icon": "icons/GiveBiscuit.svg", + "actions": { + "click": "GIVE_BISCUIT" + }, + "rules": { + "visible": "app.biscuits.notempty" + } + } + ] +} +``` diff --git a/lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts b/lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts index ef7afd3c84..a76ada9cd0 100644 --- a/lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts +++ b/lib/extensions/src/lib/components/dynamic-component/dynamic.component.ts @@ -38,7 +38,10 @@ export class DynamicExtensionComponent implements OnChanges, OnDestroy { @ViewChild('content', { read: ViewContainerRef }) content: ViewContainerRef; + /** Unique ID string for the component to show. */ @Input() id: string; + + /** Data for the dynamically-loaded component instance. */ @Input() data: any; private componentRef: ComponentRef; diff --git a/lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts b/lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts index cce0dcc322..c40f3e4a8b 100644 --- a/lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts +++ b/lib/extensions/src/lib/components/dynamic-tab/dynamic-tab.component.ts @@ -38,6 +38,7 @@ export class DynamicTabComponent implements OnInit, OnChanges, OnDestroy { @ViewChild('content', { read: ViewContainerRef }) content: ViewContainerRef; + /** Unique ID string for the component to show. */ @Input() id: string; diff --git a/lib/extensions/src/lib/services/extension.service.ts b/lib/extensions/src/lib/services/extension.service.ts index 58e86f2954..1c2b88ace6 100644 --- a/lib/extensions/src/lib/services/extension.service.ts +++ b/lib/extensions/src/lib/services/extension.service.ts @@ -43,6 +43,10 @@ export class ExtensionService { private componentRegister: ComponentRegisterService ) {} + /** + * Loads and registers an extension config file and plugins (specified by path properties). + * @returns The loaded config data + */ async load(): Promise { const config = await this.loader.load( this.configPath, @@ -52,6 +56,10 @@ export class ExtensionService { return config; } + /** + * Registers extensions from a config object. + * @param config Object with config data + */ setup(config: ExtensionConfig) { if (!config) { console.warn('Extension configuration not found'); @@ -69,36 +77,68 @@ export class ExtensionService { this.routes = this.loader.getRoutes(config); } + /** + * Adds one or more new rule evaluators to the existing set. + * @param values The new evaluators to add + */ setEvaluators(values: { [key: string]: RuleEvaluator }) { if (values) { this.evaluators = Object.assign({}, this.evaluators, values); } } + /** + * Adds one or more new auth guards to the existing set. + * @param values The new auth guards to add + */ setAuthGuards(values: { [key: string]: Type<{}> }) { if (values) { this.authGuards = Object.assign({}, this.authGuards, values); } } + /** + * Adds one or more new components to the existing set. + * @param values The new components to add + */ setComponents(values: { [key: string]: Type<{}> }) { this.componentRegister.setComponents(values); } + /** + * Retrieves a route using its ID value. + * @param id The ID value to look for + * @returns The route or null if not found + */ getRouteById(id: string): RouteRef { return this.routes.find((route) => route.id === id); } + /** + * Retrieves one or more auth guards using an array of ID values. + * @param ids Array of ID value to look for + * @returns Array of auth guards or empty array if none were found + */ getAuthGuards(ids: string[]): Array> { return (ids || []) .map((id) => this.authGuards[id]) .filter((guard) => guard); } + /** + * Retrieves an action using its ID value. + * @param id The ID value to look for + * @returns Action or null if not found + */ getActionById(id: string): ActionRef { return this.actions.find((action) => action.id === id); } + /** + * Retrieves a RuleEvaluator function using its key name. + * @param key Key name to look for + * @returns RuleEvaluator or null if not found + */ getEvaluator(key: string): RuleEvaluator { if (key && key.startsWith('!')) { const fn = this.evaluators[key.substring(1)]; @@ -109,6 +149,12 @@ export class ExtensionService { return this.evaluators[key]; } + /** + * Evaluates a rule. + * @param ruleId ID of the rule to evaluate + * @param context Parameter object for the evaluator with details of app state + * @returns True if the rule passed, false otherwise + */ evaluateRule(ruleId: string, context: RuleContext): boolean { const ruleRef = this.getRuleById(ruleId); @@ -126,14 +172,30 @@ export class ExtensionService { return false; } + /** + * Retrieves a registered extension component using its ID value. + * @param id The ID value to look for + * @returns The component or null if not found + */ getComponentById(id: string) { return this.componentRegister.getComponentById(id); } + /** + * Retrieves a rule using its ID value. + * @param id The ID value to look for + * @returns The rule or null if not found + */ getRuleById(id: string): RuleRef { return this.rules.find((ref) => ref.id === id); } + /** + * Runs a lightweight expression stored in a string. + * @param value String containing the expression or literal value + * @param context Parameter object for the expression with details of app state + * @returns Result of evaluated expression, if found, or the literal value otherwise + */ runExpression(value: string, context?: any) { const pattern = new RegExp(/\$\((.*\)?)\)/g); const matches = pattern.exec(value); diff --git a/tools/doc/doctool.config.json b/tools/doc/doctool.config.json index 7f2d8fc8a4..93c684b8be 100644 --- a/tools/doc/doctool.config.json +++ b/tools/doc/doctool.config.json @@ -65,6 +65,7 @@ "datatable-adapter.interface": "DataTableAdapter", "datatable.component": "DataTableComponent", "document-library.model": "NodePaging", + "dynamic.component": "DynamicExtensionComponent", "form-field-validator.interface": "FormFieldValidator", "header.component": "HeaderLayoutComponent", "inherited-button.directive": "InheritPermissionDirective", @@ -82,6 +83,7 @@ }, "undocStoplist": [ "model", + "component-register.service", "context-menu-holder", "data-column-list", "card-view-[a-z]+item", @@ -90,6 +92,7 @@ "content-action-list", "empty-folder-content", "empty-list", + "extension-loader.service", "loading-template", "no-content-template", "card-view-content-proxy", diff --git a/tools/doc/tools/typeLinker.js b/tools/doc/tools/typeLinker.js index 10584ae08b..1a83a87cc9 100644 --- a/tools/doc/tools/typeLinker.js +++ b/tools/doc/tools/typeLinker.js @@ -1,5 +1,5 @@ "use strict"; -exports.__esModule = true; +Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var fs = require("fs"); /* @@ -25,7 +25,7 @@ var includedNodeTypes = [ "link", "text" ]; var docFolder = path.resolve("docs"); -var adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud"]; +var adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud", "extensions"]; var externalNameLinks; function processDocs(mdCache, aggData, errorMessages) { initPhase(aggData); @@ -99,8 +99,9 @@ function updateFile(tree, pathname, aggData, _errorMessages) { } } } - else if ((node.children) && (node.type !== "heading")) { + else if ((node.children) && (node.type !== "heading")) { //((node.type === "paragraph") || (node.type === "tableCell")) { node.children.forEach(function (child, index) { + var _a; if ((child.type === "text") || (child.type === "inlineCode")) { var newNodes = handleLinksInBodyText(aggData, child.value, child.type === 'inlineCode'); (_a = node.children).splice.apply(_a, [index, 1].concat(newNodes)); @@ -108,7 +109,6 @@ function updateFile(tree, pathname, aggData, _errorMessages) { else { traverseMDTree(child); } - var _a; }); } /*else if (node.children) { node.children.forEach(child => { diff --git a/tools/doc/tools/typeLinker.ts b/tools/doc/tools/typeLinker.ts index 39488a7748..3f1eff8bd4 100644 --- a/tools/doc/tools/typeLinker.ts +++ b/tools/doc/tools/typeLinker.ts @@ -35,7 +35,7 @@ const includedNodeTypes = [ ]; const docFolder = path.resolve("docs"); -const adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud"]; +const adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud", "extensions"]; let externalNameLinks;