How to integrate into Carerix UI
This document outlines the structure and configuration details of the $.manifest.ui section.
Read the first part: How to integrate with Carerix Marketplace
Table of Contents
Section Structure
Component Types
Commands
Component Filters
Recipes
Section Structure
The following table describes the structure of the $.manifest.ui section:
Path | Type | Description | Example |
| array | List of component definitions |
|
| string | REQUIRED - Unique identifier of the component. To prevent conflicts, prefix all IDs with a unique feature prefix. |
|
| string | REQUIRED - The type of component being injected. See Component Types. |
|
| string | The ID of the parent component into which the new component will be injected. |
|
| object | Configuration settings specific to the component type. See Component Types. |
|
| array | List of filters that conditionally modify or remove the component. See Component Filters. |
|
| array | List of translation objects |
|
| string | REQUIRED - Translation key. Prefix all translation keys with a unique feature prefix to prevent conflicts. |
|
| object | REQUIRED - Locale-to-string mapping object. |
|
Supported Locales
en_US- English (REQUIRED - fallback locale)nl_NL- Dutchit_IT- Italiande_DE- Germanes_ES- Spanishfr_FR- Frenchpt_PT- Portuguese
Component Types
The table below lists all available component types.
Carerix determines which options are granted per partner.
Left Menu Group
Injects a new menu group into the application's left-side menu.
Type: left-menu-group
Config:
text(REQUIRED) - The display name of the grouporder- The position of the group in the left menu
Parent ID: Not applicable
Example:
components: - id: 'feature-id.new-menu-group' type: 'left-menu-group' config: text: 'New Menu Group' order: 0
Left Menu Item
Injects a new item into an existing or newly created left menu group.
Type: left-menu-item
Config:
text(REQUIRED) - The display name of the menu itemorder- The position of the item in the menu groupicon- The SVG icon string for the menu itemcommand(REQUIRED) - The command to be performed when clicked. See Commands.type- The type of command to performdata- Execution data for that command type
Parent ID: The ID of the menu group. Can be an existing group or a new one.
Existing menu group IDs:
Activiteitenmenu- 'Activities' menuDossiersmenu- 'Files' menuFinancieelmenu- 'Financial' menuMarketingmenu- 'Marketing' menuBeheermenu- 'Management' menuOnderhoudmenu- 'Maintenance' menu
Example:
components: - id: 'feature-id.new-menu-item' type: 'left-menu-item' parentId: 'Dossiersmenu' config: text: 'New Menu Item' order: 0 icon: '<svg ...</svg>' command: type: 'open-iframe-view' data: url: 'https://....'
Custom Tab
Injects a new tab (iframe).
Type: tab
Config:
text(REQUIRED) - The tab's display nameurl(REQUIRED) - The tab's URL
URL Variables: The URL supports variables for context information:
{{ _id }}- current record ID (e.g., 12345){{ _kind }}- current record type (e.g., CREmployee, CRVacancy){{ tenant }}- name of the tenant
Example URL: https://my-app.com/?entityKind={{_kind}}&entityId={{_id}}&tenant={{tenant}}
Parent ID: The ID of the details tab panel component.
ID patterns:
Entity details pages:
{entityName}-details.tabpanelEntity overview pages:
{entityName}-overview.tabpanelCalendar page:
calendar.tabpanel
Supported entity names: email, note, event, task, systemactivity, match, candidate, vacancy, talentpool, lead, opportunity, contact, company, publication, placement, officeemployee
Example:
components: - id: 'feature-id.new-tab-in-candidate-details' type: 'entity-details-tab' parentId: 'candidate-details.tabpanel' config: text: 'My new Iframe Tab in Candidate details' url: 'https://my-app.com/?entityId={{_id}}&entityKind={{_kind}}&tenant={{tenant}}'Background Agent
A background iframe that is loaded once at the app bootstrap stage.
Type: background-agent
Config:
url(REQUIRED) - The iframe's src
Parent ID: Not applicable
Example:
components: - id: 'feature-id.my-background-process' type: 'background-agent' config: url: 'https://my-app.com/'
Commands
Structure
Field | Type | Description |
| string | Type of command |
| object | Command's data |
Command Types
open-iframe-view
Opens a URL in the main viewport.
Data:
url(REQUIRED) - Iframe URL
URL Variables:
{{ tenant }}- name of the tenant
Example:
type: 'open-iframe-view' data: url: 'https://my-app.url/?tenant={{ tenant }}'open-entity-details
Opens an entity details page in the main viewport.
Data:
entity(REQUIRED)_id(REQUIRED) - Entity ID_kind(REQUIRED) - Entity kind (e.g., Candidate)
activeTab- ID of tab to activate (optional, defaults to first tab)
Example:
type: 'open-entity-details' data: entity: _kind: 'Candidate' _id: '1234' activeTab: 'my-tab-id'
open-entity-preview
Opens an entity preview modal.
Data:
entity(REQUIRED)_id(REQUIRED) - Entity ID_kind(REQUIRED) - Entity kind (e.g., Candidate)
activeTab- ID of tab to activate (optional, defaults to first tab)
Example:
type: 'open-entity-preview' data: entity: _kind: 'Candidate' _id: '1234' activeTab: 'my-tab-id'
open-entity-overview
Opens an entity overview (entity list) page.
Data:
entity(REQUIRED) - Entity name (e.g., Candidate)
Example:
type: 'open-entity-overview' data: entity: 'Candidate'
update-menu-item-info
Updates a menu item.
Data:
menuItemId(REQUIRED) - ID of menu item to updatecounter- Counter value
Example:
type: 'update-menu-item-info' data: menuItemId: 'feature-x-menu-item' counter: 10
Component Filters
Filters are used to adjust a component's visibility or configuration based on specific conditions, like user permissions or system settings.
Structure
Field | Type | Description | Example |
| object | Action for the filter to execute |
|
| string | Action type | - |
| object | Options for the action type | - |
| object | The condition under which the action is executed |
|
| string | Condition type | - |
| object | Options of the condition type | - |
| boolean / string / number | The expected value for the condition to be met | - |
Action Types
remove
Removes the component if the condition is met.
Options: None
Example:
- id: 'my-menu-item' config: # ... filters: - action: type: 'remove' condition: type: 'has-permission' expectedValue: false options: resource: 'urn:my-resource' operation: 'access'
remove-property-from-path
Removes a specific property from the config object.
Options:
path(REQUIRED) - Array<string | number> - Path to the property within the config object
Example:
- id: 'my-menu-item' config: text: 'Text' showCreateButton: true filters: - action: type: 'remove-property-from-path' options: path: - showCreateButton condition: type: 'has-permission' expectedValue: false options: resource: 'urn:my-resource' operation: 'create'
apply-config
Applies a config object to the existing one using PATCH merge strategy.
Options:
config(REQUIRED) - Config object to apply
Example:
- id: 'my-menu-item' config: text: 'Text' filters: - action: type: 'apply-config' options: config: showCreateButton: true condition: type: 'has-permission' expectedValue: true options: resource: 'urn:my-resource' operation: 'create'
Condition Types
has-permission
Checks if the user has a specific permission.
Options:
resource(REQUIRED) - Resource nameoperation(REQUIRED) - Operation name
Example:
condition: type: 'has-permission' expectedValue: true options: resource: 'urn:my-resource' operation: 'create'
has-some-permissions
Checks if the user has any of the specified permissions.
Options:
Array of permission objects:
resource(REQUIRED) - Resource nameoperation(REQUIRED) - Operation name
Example:
condition: type: 'has-some-permission' expectedValue: true options: - resource: 'urn:my-resource' operation: 'access' - resource: 'urn:my-resource-2' operation: 'access'
system-setting
Checks a system setting value.
Options:
settingName(REQUIRED) - Setting name
Example:
condition: type: 'system-setting' expectedValue: 'my-dev-system-name' options: settingName: 'customerName'
Recipes
Add a New Menu Item to the Activities Menu
Manifest:
ui: components: - id: 'feature-x.my-settings' type: 'left-menu-item' parentId: 'Activiteitenmenu' config: text: 'My Settings' order: 0 icon: '<svg...</svg>' command: name: 'open-iframe-view' data: url: 'https://my-app.com/my-settings-page'
Add a New Menu Group and Menu Item
Manifest:
ui: components: - id: 'feature-x.new-menu-group' type: 'left-menu-group' config: text: 'My Feature' order: 0 - id: 'feature-x.my-settings-menu-item' type: 'left-menu-item' parentId: 'feature-x.new-menu-group' config: text: 'My Settings' order: 0 icon: '<svg....</svg>' command: name: 'open-iframe-view' data: url: 'https://my-app.com/my-settings-page'
Add a Custom Tab to the Candidate Details Page
Manifest:
ui: components: - id: 'feature-x.my-new-tab-in-candidate-details' type: 'tab' parentId: 'candidate-details.tabpanel' config: text: 'My Tab In Candidate' url: 'https://my-app.com/?entityId={{_id}}&entityKind={{_kind}}&tenant={{tenant}}'Add a Custom Tab to the Calendar Page
Manifest:
id: 'feature-x' name: 'MARKETPLACE.FEATURE-X.NAME' description: 'MARKETPLACE.FEATURE-X.DESCRIPTION' ui: components: - id: 'feature-x.custom-tab-in-calendar-id' parentId: 'calendar.tabpanel' type: 'tab' config: text: 'New Tab' url: 'https://my-app.com/?tenant={{tenant}}'Remove Component Based on User Permissions
Manifest:
ui: components: - id: 'feature-x.restricted-tab' type: 'entity-details-tab' parentId: 'candidate-details.tabpanel' config: text: 'Tab' filters: - action: type: 'remove' condition: type: 'has-permission' expectedValue: false options: resource: 'urn:my-feature:my-resource' operation: 'access'
Add Component with Multi-Language Support
Manifest:
ui: translations: - key: 'MARKETPLACE.FEATURE-X.MENU_ITEM_TEXT' values: en_US: 'English text' nl_NL: 'Nederlandse tekst' components: - id: 'feature-x.new-menu-item' type: 'left-menu-item' parentId: '...' config: text: 'MARKETPLACE.FEATURE-X.MENU_ITEM_TEXT' # ...
Add Translations for Feature Name and Description
Manifest:
id: 'feature-x' name: 'MARKETPLACE.FEATURE-X.NAME' description: 'MARKETPLACE.FEATURE-X.DESCRIPTION' ui: translations: - key: 'MARKETPLACE.FEATURE-X.NAME' values: en_US: 'My awesome feature name' nl_NL: 'Mijn geweldige featurenaam' - key: 'MARKETPLACE.FEATURE-X.DESCRIPTION' values: en_US: 'My awesome feature description' nl_NL: 'Mijn geweldige functiebeschrijving'
Add Item to Topbar Quick Access Panel
Manifest:
ui: components: - id: 'feature-x.new-topbar-item' type: 'button' parentId: 'quick-access-panel' config: icon: '<svg width="24px" height="24px".....' order: 0 command: name: 'open-iframe-view' data: url: 'https://my-app.com/my-settings-page'
Need help? Contact the Carerix support team for assistance with your integration.
