Skip to main content

Columns


Columns

Columns are defined separately on widget level to allow reuse over multiple tables.

Table columns should match the available graph data delivered by the service (e.g., title, state, owner). To get the correct data, use the exact property names from the node's data. Data preview is a good tool to find available node data. Columns can use datasets to display data from related nodes.

"columnExample" : {
"label": "Title",
"data": "title"
}
More examples
"columnsExamples": {
"title" : {
"label": "Title",
"data": "title",
"sticky": true,
"width": 150
},
"related_tasks" : {
"label": "Tasks",
"iconSelect": "typeicon || type_icon_url || icon",
"data": {
"datasets": [
"relatedTasks"
],
"select": "title"
},
"services": [
"relatedTasks"
],
"settings": {
"usesAlternateOid": true,
"dragAllAtOnce": true
},
"groupHeader": "Related"
},
"percentComplete" : {
"data": "percentComplete",
"label": "%",
"settings": {
"cellRenderer": "AUTO_COLOR_RENDERER",
"cellRendererProps": {
"customColorMappings": [
{
"range": {
"upperLimit": 10,
"inclusive": false
},
"color": "red"
},
]
}
}
},
"weight_rollup" : {
"label": "Weight Rollup",
"loadingLabel": "Calculating Rollup...",
"width": 110,
"settings": {
"dependantOnService": "physicalProductServiceRollup",
"datahandler": "rollup",
"cellRenderer": "rollup",
"edgeStatement": "[type='VPMInstance']",
"nodeStatement": "[type='VPMReference']"
},
"data": "ds6wg:XP_VPMReference_Ext.Weight"
}
}

Column properties

Below is the list of properties supported by column. Each property is annotated with its data type, optionality, description, and an example where applicable.

tip

The column type jsonata is flexible and secure low-code format for generating complex cell content, the format allows configuration without deploying custom code (e.g. rollup values).

See: JSONata column type

tip

The cellRenderer HANDLEBARS_TEMPLATE_RENDERER is a flexible and secure (full sanitation applies to the template output) low-code format for rendering cell values, the format allows configuration without deploying custom code (e.g. progress bar)

See: Handlebar templates and CellRendererProps.template

Property NameDescriptionData TypeRequiredExample
dataData select configuration. Supports simple key, array of keys/selectors, object selector, or JSONata expression when type is jsonata.string / array string / objectno"title"
["state", "stateNLS"]
{"select": "title", "datasets": ["issueData"]}
"$count(context)"
datahandlerAdvanced/custom data processing configuration. Built-in handler currently supported by schema is rollup.objectno{"name": "rollup"}
editIn-cell edit configuration. Supports services, optional editSelect, and postUpdateNodeSelect for additional node field updates.objectno{"services": ["editProduct"], "editSelect": "partNumber"}
editableSet true for in-cell editing.booleannotrue
filterEnables/disables column-level filtering (default true).booleannofalse
groupHeaderWill be displayed above all columns with the same group header.stringno"Scope Engineering Item"
hrefA component name reference to navigate into as the user clicks the link.stringno"CRs_Details_Navigate"
hyperlinkURL template where {{value}} is replaced by the resolved cell value.stringno"https://example.com/issue/{{value}}"
iconSelectA data key for the icon URL e.g., 'typeIcon'.stringno"typeIcon"
labelWill be presented in the table header to the user.stringno"Title"
loadingLabelWhat to display in the cell while loading service and processing datahandler.stringno"Loading..."
rangesAllowed values for select-like editing scenarios.array stringno["Yes", "No"]
servicesService key references to execute before rendering cell values. Use service keys only (no extension-qualified *.json.* form).array stringno["scopeEngItem"]
settingsRendering/formatting behavior container (for example cellRenderer, cellRendererProps, dateFormat, style options).objectno{"cellRenderer": "AUTO_COLOR_RENDERER"}
sortTypeCustom sort behavior key for the column.stringno"alphanumeric"
stickySticks the column to the left.booleannotrue (for title)
typeBuilt-in column types (typically shorthand for renderer and other settings). Enum: text, select, person, date, textarea, dropbox, dynamic, jsonata.stringno"person"
valueFormatterCustom value formatter object. Can be used for value presentation such as relative date/time formatting.objectno{"name": "currency", "valueFormatterProps": {"currency": "USD"}}
visibleControls if the column is visible.booleannotrue
widthForces a fixed column width in pixels.integerno150

Data

Below sub elements define how column.data should be configured

Property NameDescriptionData TypeRequiredExample
datasetsDataset definition name references.array stringno["issueData"]
isEdgeControls if to select data from nodes or edges in dataset.booleannotrue
nodeConditionCytoscape selector that scopes where this select is valid. Do not combine with datasets in the same selector object.stringno"[type='Issue']"
selectA data key e.g., 'title' for advanced selection within data object.stringno"title"

DataHandler

Below sub elements define how column.datahandler should be configured

Property NameDescriptionData TypeRequiredExample
datahandlerPropsAdditional options for custom datahandler.objectno{ "edgeStatement": "[type='cost']" }
nameHandler name which is same as register in custom resource plugin rollup.stringyes"rollup"

DatahandlerProps

Below sub elements define how column column.datahandler.datahandlerProps should be configured

Property NameDescriptionData TypeRequiredExample
edgeStatementUsed with the 'rollup' cellRenderer/dataHandler to define how to expand the graph for rollup calculation. A data filtering selector (where clause). See Cytoscape Selectors. Macros: {{contextId}}.stringno"[type='relatesTo']"
nodeStatementUsed with the 'rollup' cellRenderer/dataHandler to define how to expand the graph for rollup calculation. A data filtering selector (where clause). See Cytoscape Selectors. Macros: {{contextId}}.stringno"[type='Issue']"

Settings

Below sub elements define how column.settings should be configured

Property NameDescriptionData TypeRequiredExample
cellRendererCell renderer key. Built-ins include AUTO_COLOR_RENDERER, PERSON_RENDERER, ICON_RENDERER, rollup, HANDLEBARS_TEMPLATE_RENDERER, and FILE_MENU_RENDERER (custom keys also allowed).stringno"HANDLEBARS_TEMPLATE_RENDERER"
cellRendererPropsRenderer options (for example customColorMappings, customIconMappings, template, strictVariables).objectno{"template": "<div>{{value}}</div>"}
dateFormatApply a date format pattern e.g., 'YYYY-DD-MM'.stringno"YYYY-MM-DD"
dateFormatOptionsAdditional date formatting options.objectno{ "locale": "en-US", "options": { "year": "numeric", "month": "long", "day": "numeric" } }
dependantOnServiceService key that this column depends on for data/behavior updates.stringno"fetchAllIssues"
dragAllAtOnceDrag all related column data together in one go, if multiple rows are selected includes related column data too.booleannotrue
headerRendererCustom renderer key for the column header.stringno"HANDLEBARS_TEMPLATE_RENDERER"
headerRendererPropsProps to pass into the header renderer (for example template, strictVariables).objectno{"template": "<span>{{header}}</span>"}
renderAsMultiValueTODO (purpose unclear in schema; possibly for multi-value rendering).booleannotrue
showFullNameUsed with the built-in person renderer to control if to display the full name (true is default, false display full name in tooltip only).booleannofalse
styleCellCSS styles for the data cell.objectno{"whiteSpace": "nowrap"}
styleCellValueApplies styling by using any CSS. Style is applied on cell value.objectno{"fontWeight": "bold"}
styleHeaderCSS styles for the header cell.objectno{"fontWeight": "600"}
usesAlternateOidIf true, makes the data represented by the dataset draggable (single or multi value depending on dragAllAtOnce).booleannotrue

CellRenderer

Built in column.settings.cellRenderer

Cell RendererDescriptionExample
AUTO_COLOR_RENDERERThis cell renderer generates the colored back ground for the cell value, based on the actual text value. It is useful for column which have fixed ranges like states, priority. It gives a more visually appealing cell with back ground and text color in contrast. It also supports addition properties via cellRendererPropsSame text will generate same back ground color"settings": { "cellRenderer": "AUTO_COLOR_RENDERER", "cellRendererProps": { "customColorMappings": [ { "range": { "upperLimit": 10, "inclusive": false }, "color": "red" }, ] } }
HANDLEBARS_TEMPLATE_RENDERERRenders custom HTML-like output from a Handlebars template. For cell rendering, configure settings.cellRendererProps.template; for header rendering, configure settings.headerRendererProps.template. If omitted, default templates are {{value}} (cell) and {{header}} (header)."settings": { "cellRenderer": "HANDLEBARS_TEMPLATE_RENDERER", "cellRendererProps": { "template": "<span>{{displayValue}}</span>", "strictVariables": true } }
ICON_RENDERERThis cell renderer is used to show icons instead of plan text value. For example in case of priority or severity, icons can be shown instead of text value. These icons will be based on mapping between value and corresponding icon. Additional cellRendererProps is used to define the mapping."severity" : { "label": "Severity", "data": "severity", "settings": { "cellRenderer": "ICON_RENDERER", "cellRendererProps": { "customIconMappings": [ { "value": "Low", "icon": "level-low-icon", "color": "green" }, { "value": "High", "icon": "level-high-icon", "color": "red" }, { "value": "Medium", "icon": "levelmedium-icon", "color": "orange" } ] } } },
PERSON_RENDERERThis cell renderer generates the colored back ground for the person name together along with rounded initials box for quick identification.Same person name will generate same back ground color and initials box"owner" : { "label": "Owner", "type": "person", "data": "owner.user", "settings": { "cellRenderer": "PERSON_RENDERER", "cellRendererProps": { "showFullName": true } } }
FILE_MENU_RENDERERRenders a per-file action toolbar for each file node associated with a row. Displays upload, download, edit, lock/unlock, update, and delete icon buttons. The visible button set changes based on the file's locked state. File nodes are sourced from the column's valuesWithSelect data (populated via datasets). Built-in services are auto-injected and can be overridden per consumer config. See File Menu Renderer."files": { "label": "Files", "data": { "datasets": ["documentsData"], "select": "title" }, "settings": { "cellRenderer": "FILE_MENU_RENDERER", "cellRendererProps": { "icons": { "add": "wux-ui-3ds-upload", "upload": "wux-ui-3ds-upload", "download": "wux-ui-3ds-download", "edit": "wux-ui-3ds-edit", "lock": "wux-ui-3ds-lock", "unlock": "wux-ui-3ds-unlock", "update": "wux-ui-3ds-update", "editUnlock": "wux-ui-3ds-lock-open", "updateUnlock": "wux-ui-3ds-update-unlock", "delete": "wux-ui-3ds-delete" } } } }

CellRendererProps

Below sub elements define how column column.settings.cellRendererPropsshould be configured

Property NameDescriptionData TypeRequiredExample
colorizeUsed by ICON_RENDERER to colorize icon output based on cell value.booleannotrue
customColorMappingsColor mapping rules used by AUTO_COLOR_RENDERER (value-based and/or range-based).array objectno[ { "color": "#FF0000", "value": "High" }, { "color": "#00AA00", "range": { "lowerLimit": 1, "upperLimit": 10, "inclusive": true } } ]
customIconMappingsValue-to-icon mappings used by ICON_RENDERER. Schema requires at least value and icon per item.array objectno[ { "value": "Open", "icon": "wux-ui-3ds-flag", "iconFamily": "DSFontIcon", "color": "#00FF00" } ]
defaultIconFallback icon used by ICON_RENDERER when no mapping matches.stringno"wux-ui-3ds-flag"
fixedColorMappingsFixed value-to-color map used by AUTO_COLOR_RENDERER.objectno{"High": {"color": "#FF0000", "textColor": "white"}}
iconsIcon configuration object used by FILE_MENU_RENDERER. Maps action keys to CSS icon class names. See Icons.objectno{"add": "wux-ui-3ds-plus"}
strictVariablesControls Handlebars strict mode. Default behavior is true; set to false to allow missing variables without failing rendering.booleannotrue
templateHandlebars template string used by HANDLEBARS_TEMPLATE_RENDERER. For cell templates, context includes value, rawValue, displayValue, and rawObject (when available). See Handlebar templates.stringno"<span>{{displayValue}}</span>"
useFormattedValueIf true, resolve color mappings using formatted value instead of raw value.booleannofalse
valueIconMappingsValue-driven mappings for ICON_RENDERER with optional default/callback/plugin metadata.array objectno[ { "value": "Open", "icon": "wux-ui-3ds-flag" }, { "default": true, "icon": "wux-ui-3ds-help" } ]
CustomColorMappings

Below sub elements define how column column.settings.cellRendererProps.customColorMappings should be configured

Property NameDescriptionData TypeRequiredExample
colorThe color. If HEX (e.g., #FF0000) is used for background, a matching foreground color is applied.stringno"#FF0000"
rangeDefines a numeric range to apply color.objectno{ "upperLimit": 100, "lowerLimit": 50, "inclusive": true }
valueThe cell value to map a colour with.stringno"High"
CustomColorMappings.range

Below sub elements define how column column.settings.cellRendererProps.customColorMappings.range should be configured

Property NameDescriptionData TypeRequiredExample
inclusiveControl if to include the range limit value or not (== vs >=).booleannotrue
lowerLimitThe lower limit numeric range to apply color.numberno50
upperLimitThe upper limit numeric range to apply color.numberno100
CustomIconMappings

Below sub elements define how column column.settings.cellRendererProps.customIconMappings should be configured

Property NameDescriptionData TypeRequiredExample
colorA colour e.g., #FF0000.stringno"#00FF00"
iconEither a DSFontIcon or Entypo icon key e.g., 'wux-ui-3ds-flag'.stringno"wux-ui-3ds-flag"
iconFamilyThe icon family to use. Enum: DSFontIcon, entypo.stringno"DSFontIcon"
valueThe data value to map.stringno"Open"
Icons

Below sub elements define how column column.settings.cellRendererProps.icons should be configured for FILE_MENU_RENDERER

Property NameDescriptionData TypeRequiredExample
addIcon class for the row-level upload button. Creates a new file on the document. Shown at the top of the cell regardless of lock state.stringno"wux-ui-3ds-upload"
deleteIcon class for the delete button. Removes the file from the document.stringno"wux-ui-3ds-delete"
downloadIcon class for the download button. Available when the file is not locked.stringno"wux-ui-3ds-download"
editIcon class for the edit button. Downloads the file for editing and automatically locks it. Available when the file is not locked.stringno"wux-ui-3ds-edit"
editUnlockIcon class for the cancel-edit button. Unlocks the file without committing changes. Available when the file is locked.stringno"wux-ui-3ds-lock-open"
lockIcon class for the lock button. Locks the file. Available when the file is not locked.stringno"wux-ui-3ds-lock"
unlockIcon class for the unlock button. Unlocks the file. Available when the file is locked.stringno"wux-ui-3ds-unlock"
updateIcon class for the update button. Opens a file picker to upload a new revision (REVISE). Available when the file is not locked.stringno"wux-ui-3ds-update"
updateUnlockIcon class for the update-and-unlock button. Uploads a new revision and unlocks the file. Available when the file is locked.stringno"wux-ui-3ds-update-unlock"
uploadIcon class for the per-file upload button. Adds a new file to the document.stringno"wux-ui-3ds-upload"

DateFormatOptions

Below sub elements define how column.settings.dateFormatOptions should be configured

Property NameDescriptionData TypeRequiredExample
localeLocale for date formatting.stringno"en-US"
optionsOptions for date formatting (year, day, month).objectno{ "year": "numeric", "day": "numeric", "month": "long" }

HeaderRendererProps

Below sub elements define how column.settings.headerRendererProps should be configured

Property NameDescriptionData TypeRequiredExample
strictVariablesControls Handlebars strict mode for header templates. Default behavior is true; set to false to allow missing variables without failing rendering.booleannotrue
templateHandlebars template string for settings.headerRenderer = "HANDLEBARS_TEMPLATE_RENDERER". Header template context includes header, field, and columnIndex. See Handlebar templates.stringno"<span>{{header}} ({{columnIndex}})</span>"

ValueFormatter

Below sub elements define how column.valueFormatter should be configured

Property NameDescriptionData TypeRequiredExample
nameFormatter type.stringyes"currency"
valueFormatterPropsAdditional options for custom value formatter.objectno{"currency": "USD"}

Details

Handlebars templates

The cellRenderer HANDLEBARS_TEMPLATE_RENDERER is a flexible and secure low-code format for rendering cell values, the format allows quick configuration without writing and deploying custom code. Full sanitation applies to the template output.

See https://handlebarsjs.com for more details.

tip

The AI assistant can quickly generate templates for you.

Handlebar example column

The below % column is using a handlebar template. handlebars.png

Example configuration

"data": "percentComplete",
"label": "%",
"settings": {
"cellRenderer": "HANDLEBARS_TEMPLATE_RENDERER",
"cellRendererProps": {
"template": "<div data-style='{\"width\":\"100%\",\"backgroundColor\":\"#f1f3f5\",\"borderRadius\":\"8px\",\"height\":\"14px\",\"overflow\":\"hidden\"}'><div data-style='{\"width\":\"{{value}}%\",\"height\":\"100%\",\"backgroundColor\":\"{{#if (gte value 80)}}#28a745{{else}}{{#if (gte value 40)}}#f1c40f{{else}}#e74c3c{{/if}}{{/if}}\",\"borderRadius\":\"8px\",\"textAlign\":\"center\",\"fontSize\":\"10px\",\"lineHeight\":\"14px\",\"color\":\"#111\"}'>{{value}}%</div></div>",
"strictVariables": true
}
}

Styling

The style attribute is sanitized for security reasons. Instead use the data-style attribute with react camelCase styling syntax. Safe style properties only will be included in the resulting html.

Example styling

{
"width":"{{value}}%",
"height":"100%",
"backgroundColor":"{{#if (gte value 80)}}#28a745{{else}}{{#if (gte value 40)}}#f1c40f{{else}}#e74c3c{{/if}}{{/if}}",
"borderRadius":"8px",
"textAlign":"center",
"fontSize":"10px",
"lineHeight":"14px",
"color":"#111"
}

Handlebars input

Handlebars uses an input object to generate HTML. Handlebars templates look like regular text with embedded Handlebars expressions.

<p>{{value}}</p>

A handlebars expression is a {{, some contents, followed by a }}. When the template is executed, these expressions are replaced with values from an input object.

<p>Some text</p>
ExpressionDescriptionExample configExample result
{{value}}The display value that is rendered by default on plain columns<p>{{value}}</p>Physical Product
{{displayValue}}The display value that is rendered by default on plain columns<p>{{displayValue}}</p>Physical Product
{{rawValue}}The unformatted raw value as selected from the graph<p>{{rawValue}}</p>VPMReference
{{rawObject}}Used in case the cell value outputs an object. To generate complex multi value object output to base the rendering on use a dataHandler or a jsonata column.<p>{{rawObject.assignee}} ({{rawObject.allocation}}%)</p>Tom (50%)
{{<rawObjectProperty>}}Top level raw object keys are accessible directly from the input object.<p>{{assignee}} ({{allocation}}%)</p>Tom (50%)
Strict input

When strictVariables is true missing input handlebar expressions will return an empty rendering. If you want a relaxed rendering set strictVariables to false and the template will render even with the missing input.

Handlebars helpers

Available helpers in HANDLEBARS_TEMPLATE_RENDERER templates:

  • eq, ne, gt, gte, lt, lte
  • and, or, not
  • dateNowMS, dateNowISO
  • dateISOToMS, dateToISO
  • dateDayOfWeek, dateMonth, dateYear, dateISOWeek

Example helper usage:

{{#if (gte value 80)}}High{{else}}Normal{{/if}}

JSONata column type

The column type jsonata is flexible and secure low-code format for generating complex cell content, the format allows configuration without deploying custom code (e.g. rollup values). The JSONata expression is evaluated per row. The column type framework pass a json payload with the full normalized graph data to the JSONata evaluation.

JSON payload format: { context: string[], nodes: object[], edges: object[] } where the context holds local node/edge IDs for the current row/cell and node/edge holds all graph-wide data.

The below Assignee Allocation column is using a jsonata to generate the rollup allocation by assignee for the full child structure. jsonata.png

tip

The JSONata syntax is hard to learn. The built in AI assistant knows the JSON payload format and have access to tools for generating and validating JSONata for you.

See https://docs.jsonata.org for details on JSONata. https://try.jsonata.org is a great tool to try your expressions on payloads.

Examples:


$count(context)


$join(context, ', ')


nodes[id in %.context][0].type


(
$root := $filter(
context,
function($cid) {
$count(
$filter(
nodes,
function($n) {
$n.id = $cid
}
)
) > 0
}
)[0];

$desc := function($ids) {
(
$childEdges := $filter(
edges,
function($e) {
$e.type = 'tasks' and $count($ids[$ = $e.source]) > 0
}
);

$childIds := $distinct($childEdges.target);

$count($childIds) = 0
? []
: $append($childIds, $desc($childIds))
)
};

$allChildIds := $distinct($desc([$root]));

$childNodes := $filter(
nodes,
function($n) {
$count($allChildIds[$ = $n.id]) > 0
}
);

$types := $map(
$childNodes,
function($n) {
$n.type
}
);

$uniqueTypes := $distinct($types);

$join(
$map(
$uniqueTypes,
function($t) {
$t & '(' & $count($filter($types, function($x) { $x = $t })) & ')'
}
),
', '
)
)

File Menu Renderer

FILE_MENU_RENDERER renders a per-file action toolbar inside a table cell. For each file node associated with the row, it displays a row of icon buttons that invoke document management services (upload, download, edit, lock, unlock, update, delete). The button set adapts based on whether the file is currently locked.

Overview

  • Row-level upload: An optional add icon at the top of the cell lets users attach a new file to the parent document without selecting a specific existing file.
  • Per-file buttons: For each file node, action icons are rendered. Which icons appear depends on the locker field: if the file is not locked the unlocked set is shown; if it is locked the locked set is shown.
  • Indirect (relationship) nodes: If valuesWithSelect contains items with both source and target fields, they are treated as relationship connector nodes. The target is used as the file id and the source overrides the parentContextId used in service calls (for scenarios such as product → document → files).

Unlocked file buttons: upload, download, edit, lock, update, delete

Locked file buttons: upload, editUnlock, unlock, updateUnlock, delete

Data format (valuesWithSelect)

The renderer reads file nodes from the valuesWithSelect array provided by the table cell. Each element represents one property of one file node:

FieldDescription
idThe file or document node ID. Items without an id are ignored.
selectItemThe property name for this item. Recognised values: title, locker, docTitle, source, target.
displayValue / valueThe value for the property. displayValue takes priority.

Items sharing the same id are grouped into a single file node object. A node with both source and target set is treated as a relationship connector and is excluded from rendering.

selectItem valueDescription
titleFile name shown in the cell label.
docTitleDocument title. If present, used in place of title for display.
lockerWho currently holds the lock, or empty string / absent when not locked.
sourceSource node id for an indirect relationship connector.
targetTarget node id for an indirect relationship connector.

Built-in services

The following services are automatically available for any column using FILE_MENU_RENDERER. They do not need to be declared in the consumer config. Any of them can be overridden by declaring a service with the same key in the consumer configuration.

Service keyHTTP methodPurpose
checkinTicketPUTObtains an upload ticket. Chains into checkin.
checkinPOSTPerforms the file check-in using the ticket URL. Chains into uploadDocument.
uploadDocumentPUTAttaches the uploaded file to the document. Chains into unLockDocument.
downloadDocumentPUTObtains a download ticket for the file.
editDocumentPUTObtains a download ticket for edit. The renderer automatically calls lockDocument after a successful response.
lockDocumentPOSTLocks the file.
unLockDocumentPOSTUnlocks the file (also used for cancel-edit).
deleteDocumentPUTRemoves the file from the document.

Example column configuration

"files": {
"label": "Files",
"data": {
"datasets": ["documentsData"],
"select": "title"
},
"settings": {
"cellRenderer": "FILE_MENU_RENDERER",
"cellRendererProps": {
"icons": {
"add": "wux-ui-3ds-upload",
"upload": "wux-ui-3ds-upload",
"download": "wux-ui-3ds-download",
"edit": "wux-ui-3ds-edit",
"lock": "wux-ui-3ds-lock",
"unlock": "wux-ui-3ds-unlock",
"update": "wux-ui-3ds-update",
"editUnlock": "wux-ui-3ds-lock-open",
"updateUnlock": "wux-ui-3ds-update-unlock",
"delete": "wux-ui-3ds-delete"
}
}
}
}