Valtimo docs
  • Welcome to Valtimo
  • Fundamentals
    • â„šī¸What is Valtimo
    • đŸ™ī¸Architectural overview
      • Choosing the right setup
      • âš™ī¸Available modules
    • Process Exchange
      • Process blueprints
      • Building blocks
    • 📖How to use this documentation
    • đŸ–ąī¸Getting started
      • Configuring the database
      • Modules
        • Core modules
          • Audit
          • Authorization
          • Camunda
          • Case
          • Connector
          • Contract
          • Core
          • Dashboard
          • Document
          • Document generation
          • Exporter
          • Form
          • Form flow
          • Form flow Valtimo
          • Importer
          • Localization
          • Local document generation
          • Local mail
          • Mail
          • Mandrill
          • Milestones
          • Plugins
          • Outbox
            • Outbox RabbitMQ
          • Process document
          • Resource
          • Temporary resource storage
          • Test utils common
          • Value resolvers
          • Valtimo dependencies
          • Valtimo dependency versions
          • Web
            • CORS
        • GZAC modules
          • Besluit
          • Besluiten API
          • Catalogi API
          • Contactmoment
          • Documenten API
          • Haalcentraal BRP
          • Klant
          • Notificaties API
          • Notificaties API Authentication
          • Objecten API
          • Objecten API Authentication
          • Object management
          • Objects API
          • Objecttypen API
          • OpenZaak
          • OpenZaak Plugin Authentication
          • OpenZaak resource
          • Portaaltaak
          • SmartDocuments
          • Valtimo GZAC dependencies
          • Verzoek
          • Wordpress mail
          • Zaken API
      • Compatibility matrix
  • Features
    • 🔏Access control
      • Configurable elements
      • Configuring roles
      • Configuring permissions
      • Configuring conditions
      • Configuring context conditions
      • For developers
        • Front-end access control
        • Creating a resource
        • Creating a relation to another resource
        • Running custom code without access control
    • đŸ—ƒī¸Case
      • Configuration
      • Document definition
      • List
      • Notes
      • Processes
      • Search fields
      • Statuses
      • Tabs
        • Widgets
      • For developers
        • Search fields API
        • Case list tab order
        • Custom case list columns
        • Custom case tabs
        • Case migration
        • Custom case headers
        • Register Angular component
    • 📊Dashboard
      • Widget data sources
      • Widget display types
      • For developers
        • Custom dashboards
        • Custom data sources
        • Custom display types
        • Widget translations
    • 📋Forms
      • Prefilling data
      • Interpolating data
      • Form flow
      • Objecten API object form
      • For developers
        • Form field data resolver
        • Custom value resolvers
        • Custom form flow component
        • Spring beans for Form flow
    • 🌍Localization
      • For developers
    • Logging
      • For developers
    • âœ‰ī¸Outbox
      • For developers
    • 🔌Plugins
      • Configuring plugins
      • SmartDocuments plugin
      • Exact Plugin
      • For developers
        • Custom plugin definitions
    • ⭕Process
      • System processes
      • Correlating messages
      • Job service
      • Process links
      • For developers
        • Integrating spring beans in a process
        • Whitelisting Spring beans for Camunda
    • ✅Tasks
      • Task list columns
    • 📃ZGW
      • Documents
        • Access control
        • Uploading to Documenten API with metadata
      • Creating extra case tabs for Zaakobjects
      • ZGW plugins
        • Besluiten Plugin
        • Catalogi API plugin
        • Documenten API plugin
        • Object Token Auhentication Plugin
        • Objecten API Plugin
        • Objecttypen API Plugin
        • Open Zaak plugin
        • Portaaltaak Plugin
        • Verzoek Plugin
        • Zaken API plugin
  • Release notes
    • Release notes
    • 12.x.x
      • 12.13.0 (backend only)
      • 12.12.0
      • 12.11.0
      • 12.10.0
        • 12.10.1
        • 12.10.2
      • 12.9.0
      • 12.8.0
      • 12.7.0
        • 12.7.1
        • 12.7.2
      • 12.6.0
        • 12.6.1
      • 12.5.0
      • 12.4.0
        • 12.4.1
      • 12.3.0
        • 12.3.1
      • 12.2.0
      • 12.1.0
      • 12.0.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
          • Spring Boot 3
    • 11.x.x
      • 11.3.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.2.0 (RC)
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.5
        • Valtimo frontend libraries
      • 11.1.4
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.1
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.0.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
    • 10.x.x
      • 10.8.3
        • Valtimo backend libraries
      • 10.8.2
        • Valtimo frontend libraries
      • 10.8.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.7.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.6.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.5.3
        • Valtimo backend libraries
      • 10.5.2
        • Valtimo backend libraries
      • 10.5.1
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.5.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.4.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.3.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.2.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.1.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.0.1
        • Valtimo frontend libraries
      • 10.0.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
    • 9.x.x
      • 9.26.2/5.15.1
        • Valtimo backend libraries (9.26.2)
        • Migration
      • 9.26.1/5.15.1
        • Valtimo backend libraries (9.26.1)
        • Valtimo frontend libraries (5.15.1)
      • 9.26.0/5.15.0
        • Valtimo backend libraries (9.26.0)
        • Valtimo frontend libraries (5.15.0)
        • Migration
      • 9.25.0/5.14.0
        • Valtimo backend libraries (9.25.0)
        • Valtimo frontend libraries (5.14.0)
      • 9.24.0/5.13.0
        • Valtimo backend libraries (9.24.0)
        • Valtimo frontend libraries (5.13.0)
      • 9.23.0/5.12.0
        • Valtimo backend libraries (9.23.0)
        • Valtimo frontend libraries (5.12.0)
      • 9.22.0/5.11.0
        • Valtimo backend libraries (9.22.0)
        • Valtimo frontend libraries (5.11.0)
        • Migration
      • 9.21.0/5.10.0
        • Valtimo backend libraries (9.21.0)
        • Valtimo frontend libraries (5.10.0)
        • Migration
      • 9.20.0/5.9.1
        • Valtimo backend libraries (9.20.0)
        • Valtimo frontend libraries (5.9.1)
        • Migration
      • 9.19.0/5.8.0
        • Valtimo backend libraries (9.19.0)
        • Valtimo frontend libraries (5.8.0)
        • Migration
      • 9.18.0/5.6.0
        • Valtimo backend libraries (9.18.0)
        • Valtimo frontend libraries (5.6.0)
        • Migration
      • 9.17.0/5.5.0
        • Valtimo backend libraries (9.17.0)
        • Valtimo frontend libraries (5.5.0)
      • 9.16.0/5.4.0
        • Valtimo backend libraries (9.16.0)
        • Valtimo frontend libraries (5.4.0)
  • Running Valtimo
    • Application configuration
      • Temporary file-storage
      • Configuring CORS
      • REST API endpoint security test
      • Content Security Policy (CSP)
      • Configuring Keycloak
      • Temporary file storage
      • Feature toggles
  • Customizing Valtimo
    • Front-end customization
      • Customizing Carbon theme
      • Custom logo
      • Custom components
        • Custom case management tab
  • Contributing to Valtimo
    • Valtimo/GZAC
    • Documentation
    • Branching and release strategy
  • Nog een plek geven
    • References
      • Modules
        • Authorization
        • Document
        • Object management
      • User interface
        • Design philosophy
        • Carbon design system
        • v-button
        • Breadcrumbs
        • Setting up a list with actions
        • Setting up a list with custom template columns
        • Toolbar actions list
        • Multi select List
        • Pagination and sorting
        • Toolbar actions list
        • Searchable list
        • Valtimo Carbon List
      • Supported databases
      • Process beans
      • Environment
  • Templates
    • Feature
      • Subject
      • For developers
        • Subject for devs
    • Release notes
Powered by GitBook
On this page
  • Configuring widgets
  • JSON Editor
  • Access control
  • Resources and actions
  • Examples
  1. Features
  2. Case
  3. Tabs

Widgets

PreviousTabsNextFor developers

Last updated 15 days ago

Widgets enable the presentation of case-specific data, either from the case's own data objects or from external data sources. This approach standardizes the display of case data across all cases and eliminates the need for knowledge of Form.io or HTML to present case data effectively.

Configuring widgets

Widget configuration is part of tab configuration for a case definition.

  • Go to the Admin menu

  • Go to the Cases menu and select the case to configure widgets for

  • Select the Tabs tab

The list of configured tabs for a case is displayed within the case settings. To configure widgets, select an existing tab with its type set to Widgets, or add a new widget-type tab to the configuration by clicking the Add tab button as documented here. Upon selection, the widget configuration for the chosen tab will open, displaying a list of widgets created for that tab.

Click Add widget to open the create new widget modal that will guide the widget creation in 4 steps.

1

Choose widget type

Five types of widgets are currently supported:

  • Fields &#xNAN;A set of single data elements in a widget.

  • Custom component &#xNAN;An option to direct to a custom Angular component in de codebase.

  • Form.io form &#xNAN;This type makes is possible to display a Form.io form within a widget. The form is prefilled with case data.

  • Table &#xNAN;Present array case data in a table within a widget.

  • Collection &#xNAN;Present array case data in a collection of cards within a widget.

2

Choose widget width

The widget can be configured to display on any number of columns between 1 and 4.

3

Choose widget style

A widget can either have a "Default" color scheme or it can be "High Contrast" to attract focus to that widget and it's content.

4

Choose widget content

Depending on the widget type, the content is filled in differently. Click the widget type below to view the details for configuration.

Fields widget

To create a fields widget the following configurations need to be done.

  • Widget title &#xNAN;The widget title is presented in the UI at the top-left corner of the widget and should describe the content for that widget.

  • Configure widget fields &#xNAN;Each field can be configured to display case data in a certain way.

For each field that is added to the widget the following configuration is required in order to display the data correctly in the UI.

  • Field title &#xNAN;This is presented as the label of the field

  • Field value &#xNAN;Add the exact path to the data in the JSON document.

  • Display type &#xNAN;Select the way the data is presented in the UI. Please find the available display types below.

Display types

The following display types are supported in the case widgets configuration.

Display type
Presentation

Text

Value is presented in the UI as regular text.

Yes/No

This converts a Boolean value to "Yes"/"No".

Date

Accepts a UTC date string as input. A format can be specified for how you wish the date to be displayed (this is optional).

Number

The number display type is based on the DecimalPipe* from Angular. Optional formatting can be specified for how you wish the number to be displayed.

Percentage

The percentage display type is based on the PercentPipe* from Angular. Optional formatting can be specified for how you wish the percentage to be displayed. By default any value is divided by 100, unless a format is specified. This has been done because of the values that the Angular PercentPipe* expects.

Currency

The currency display type is based on the CurrencyPipe* from Angular. Optional formatting can be specified for how you wish the currency to be displayed.

Enum

Enum (or enumerate) is meant to assign a value to a key as to display data more accurately. The key is stored in the JSON document, the value is configured in the enum, based on the key the corresponding value is displayed.

Below descriptions are from the following Angular documentation pages:

  • https://v17.angular.io/api/common/DecimalPipe

  • https://v17.angular.io/api/common/PercentPipe

  • https://v17.angular.io/api/common/CurrencyPipe

*Angular DecimalPipe

The value's decimal representation is specified by the digitsInfo parameter, written in the following format:

{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}
  • minIntegerDigits: Minimum number of integer digits before the decimal point. Default is 1.

  • minFractionDigits: Minimum number of digits after the decimal point. Default is 0.

  • maxFractionDigits: Maximum number of digits after the decimal point. Default is 3.

If the formatted value is truncated it will be rounded using the "to-nearest" method:

{{3.6 | number: '1.0-0'}}
<!--will  '4'-->

{{-3.6 | number:'1.0-0'}}
<!--will  '-4'-->

*Angular PercentPipe

Decimal representation options, specified by a string in the following format: {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.

  • minIntegerDigits: Minimum number of integer digits before the decimal point. Default is 1.

  • minFractionDigits: Minimum number of digits after the decimal point. Default is 0.

  • maxFractionDigits: Maximum number of digits after the decimal point. Default is 0.

*Angular CurrencyPipe

The format for the currency indicator. One of the following:

  • code: Show the code (such as USD).

  • symbol(default): Show the symbol (such as $).

  • symbol-narrow: Use the narrow symbol for locales that have two symbols for their currency. For example, the Canadian dollar CAD has the symbol CA$ and the symbol-narrow $. If the locale has no narrow symbol, uses the standard symbol for the locale.

  • String: Use the given string value instead of a code or a symbol. For example, an empty string will suppress the currency & symbol.

  • Boolean (marked deprecated in v5): true for symbol and false for code.

Widget columns

The fields widget is also able to display data on multiple columns. As such a column can be added or removed. However you cannot have more columns than the width of the widget (For example, if a widget has a width set to Medium you cannot add more than 2 columns to it)

Custom component widget

Knowledge requirements

  • Angular

Once a component is configured in Angular any user is able to configure the component in a widget. Adding the component itself is a developers task and programming skills are required. Documentation is available on this page to register a custom Angular component.

Adding a custom component widget to a page is easily done.

  • Widget title &#xNAN;The widget title is presented in the UI at the top-left corner of the widget and should describe the content for that widget.

  • Angular component &#xNAN;Registered Angular components in the front-end implementation of Valtimo will be listed in a dropdown menu. This component defines the widget content.

Form.io widget

For the Form.io widget there's only two fields that need to be configured:

  • Widget title &#xNAN;The widget title is presented in the UI at the top-left corner of the widget and should describe the content for that widget.

  • Form.io form &#xNAN;A dropdown is available with all Form.io definitions that are available in the implementation

Color tokens:

For the Form.io forms to be properly displayed in both normal and high contrast widgets, some custom CSS adjustments might be necessary. Form.io text should use the Carbon color tokens instead of regular hex values. For example:

color: var(--cds-text-primary)
Table widget

Knowledge requirements

  • Basic knowledge of JSON file structure.

A table widget can be used when arrays (lists) are stored in the case data structure and need to be presented as such in the case UI. The following fields need to be configured for a table widget.

  • Widget title &#xNAN;The widget title is presented in the UI at the top-left corner of the widget and should describe the content for that widget.

  • Rows per page &#xNAN;If the content exceeds the number of rows pagination will be added in the UI.

  • Path to table data &#xNAN;The exact path in the JSON document that contains the array with data.

  • Table columns &#xNAN;Columns need to be based on the available fields within the array data.

Configuring table columns

For each column in the table the following configurations needs to be done.

  • Title &#xNAN;The title will be displayed as the label of the field in the widget.

  • Value &#xNAN;The value itself will not actually be configured, the path targeting the value in the JSON document is configured. The value is passed through by the widget.

  • Display type &#xNAN;Select the way the data is presented in the UI. Please find the available display types below.

The available display types are the same as for the fields widget.

Table widget configuration example

Below example shows the configuration for a table that displays uploaded files by there name and creation date.

The path in the JSON document for the array: doc:/uploadedFiles

The information from the array that is shown:

Since the location of the array itself is known it is no longer need to define a full JSON path for the values of the table columns. Only define the data location within the array like so: data/name

data/createdOn

To gather the data the widget code will combine the "Path to table data" field with the value fields from the column configuration. This results in the following JSON paths where x is filled by iterating over the array data.

doc:/uploadedFiles[x]/data/name

doc:/uploadedFiles[x]/data/createdOn

This configuration is based on below JSON. The uploadedFiles object exists in the root of this JSON document. Below the JSON a screenprint of the configuration in the Widget configuration UI.

"uploadedFiles": [ 
  {
    "data": { 
      "key": "Upload Test-22b44a2f-9790-4730-b2bf-d8f017711046.docx", 
      "name": "Upload Test.docx",
      "createdOn": "2024-10-30T07:15:33.121Z",
      "bucketName": "exampleFiles",
      "resourceId": "85a1b768-41b4-4f62-adbc-40dcbe0e7adf",
      "sizeInBytes": 12668 
    },
    "size": 12668,
    "type": "docx",
    "storage": "url",
    "customUpload": true,
    "originalName": "Upload Test.docx"
  } 
]

Table widget options

Below option there is a toggle available named "First column is the title of the row". Enabling this will display the first column with italics and no underline. See below screenshots for the difference in presentation in the result of above configuration. 6 files where uploaded for this example so 3 pages of each 2 files are shown in the widget.

Collection widget

Knowledge requirements

  • Basic knowledge of JSON file structure.

A collection widget can be used when arrays (lists) are stored in the case data structure and need to be presented as such in the case UI. The following fields need to be configured for a collection widget.

  • Widget title &#xNAN;The widget title is presented in the UI at the top-left corner of the widget and should describe the content for that widget.

  • Number of cards per page &#xNAN;If the content exceeds the number of rows pagination will be added in the UI.

  • Path to collection data &#xNAN;The exact path in the JSON document that contains the array with data.

  • Card title display type Same as each text field, the title of the card can also be set to a certain display type.

Configuring cards

For each card in the collection the following configurations needs to be done.

  • Card title &#xNAN;The title of each card can be set to a value from the array items. So the card title is not a label in this case, but a value from a array item.

  • Display type &#xNAN;Select the way the card title is presented in the UI. Please find the available display types below.

Configuring card fields

A set of fields can be configured that will display the data for each card. The following configuration needs to be done to add a field to a card.

  • Title &#xNAN;Will be displayed as the fields label in the UI.

  • Value The value itself will not actually be configured, the path targeting the value in the JSON document is configured. The value is passed through by the widget.

  • Display type &#xNAN;Select the way the data is presented in the UI. Please find the available display types below.

  • Field width &#xNAN;For each field the choice can be made to use the full width of the card or half.

The available display types are the same as for the fields widget.

Collection widget configuration example

Below example shows the configuration for a collection that displays uploaded files. Each card in the collection will get it's title and the card fields from the array data. The card name will be set to the file name. The card fields will show following information:

  • Created on

  • Storage bucket

  • Size (in bytes)\

The path in the JSON document for the array: doc:/uploadedFiles

The information from the array that is shown:

Since the location of the array itself is known it is no longer need to define a full JSON path for the values of the card fields. Only define the data location within the array like so: Card title: data/name Card fields:

data/createdOn

data/storageBucket

data/sizeInBytes

To gather the data the widget code will combine the "Path to collection data" field with the value fields from the card configuration. This results in the following JSON paths where x is filled by iterating over the array data.

doc:/uploadedFiles[x]/data/name

doc:/uploadedFiles[x]/data/createdOn

doc:/uploadedFiles[x]/data/storageBucket

doc:/uploadedFiles[x]/data/sizeInBytes

This configuration is based on below JSON. The uploadedFiles object exists in the root of this JSON document. Below the JSON a screenprint of the configuration in the Widget configuration UI.

"uploadedFiles": [ 
  {
    "data": { 
      "key": "Upload Test-22b44a2f-9790-4730-b2bf-d8f017711046.docx", 
      "name": "Upload Test.docx",
      "createdOn": "2024-10-30T07:15:33.121Z",
      "bucketName": "exampleBucket",
      "resourceId": "85a1b768-41b4-4f62-adbc-40dcbe0e7adf",
      "sizeInBytes": 12668 
    },
    "size": 12668,
    "type": "docx",
    "storage": "url",
    "customUpload": true,
    "originalName": "Upload Test.docx"
  } 
]

Presentation in the UI

JSON Editor

Widgets for a case can also be configured directly through a JSON editor. For process engineers, configuring widgets in JSON may offer greater control and efficiency. In the second tab of the Widget configuration UI, a JSON editor displays the complete widget configuration in JSON format. This editor includes error-checking functionality to ensure the JSON structure is correct.

Access control

Access to the case widgets can be configured through access control. More information about access control can be found here.

Resources and actions

Resource type
Action
Effect

com.ritense.case_.domain.tab.CaseWidgetTabWidget

view

Allows viewing a case widget

Examples

Permission to view all case widgets
{
    "resourceType": "com.ritense.case_.domain.tab.CaseWidgetTabWidget",
    "action": "view",
    "conditions": []
}
Permission to view all case widgets of one specific case type
{
   "resourceType": "com.ritense.case_.domain.tab.CaseWidgetTabWidget",
   "action": "view",
   "conditions": [
      {
         "type": "field",
         "field": "id.caseWidgetTab.id.caseDefinitionName",
         "operator": "==",
         "value": "evenementenvergunning"
      }
   ]
}
Permission to view one specific case widget
{
   "resourceType": "com.ritense.case_.domain.tab.CaseWidgetTabWidget",
   "action": "view",
   "conditions": [
      {
         "type": "field",
         "field": "key",
         "operator": "==",
         "value": "personal-data"
      }
   ]
}

See below screenshot for the presentation result of a collection. 6 files where uploaded for this example so 3 pages of each 2 cards are shown in the widget.

đŸ—ƒī¸
Widget configuration UI
Choosing widget type
Choosing widget width
Choosing widget style
Uploaded files table widget configuration
Uploaded files with first column set as title column
Uploaded files collection widget configuration