Name
sn_now_list_common.ListTransformScriptBuilder
Description
Transform script builder api - exposed to transform script for making quick modification to the now-list data model
Script
var ListTransformScriptBuilder = Class.create();
ListTransformScriptBuilder.prototype = (function() {
var _rowDefinitions, _columnDefinitions, _declarativeActions, _hideDAsRequiringSelection, _columnDefinitionMutations;
var rowOperations = [];
var columnOperations = [];
function initialize(declarativeActions) {
_hideDAsRequiringSelection = false;
_rowDefinitions = { rows: [] };
_columnDefinitions = { columns: [] };
_declarativeActions = declarativeActions || [];
_columnDefinitionMutations = {};
}
function getRowDefinitions() {
return _rowDefinitions;
}
function setRowDefinitions(rowDefs) {
_rowDefinitions = rowDefs;
return this;
}
function getColumnDefinitions() {
return _columnDefinitions;
}
function setColumnDefinitions(colDefs) {
_columnDefinitions = colDefs;
return this;
}
// column mutators
function disableLinkColumns() {
columnOperations.push(function(column, index) {
if (['url','link','person'].indexOf(column.type) > -1 || index === 0) {
column.disabled = true;
}
});
return this;
}
// dont expose for now, method name not clear what it would do
function disableColumn(columnKey) {
columnOperations.push(function(column) {
if (column.key === columnKey) {
column.disabled = true;
}
});
return this;
}
function changeColumnLabel(columnKey, label) {
columnOperations.push(function(column) {
if (column.key === columnKey) {
column.label = label;
}
});
return this;
}
function removeCellFiltering(columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
if (column.cellActions && column.cellActions.length) {
column.cellActions = column.cellActions.filter(action => {
return ['show_matching','filter_out'].indexOf(action.id) === -1;
});
}
}
});
return this;
}
function disableSortability() {
_columnDefinitionMutations.columnHeaderTextTooltip = null;
columnOperations.push(function(column) {
column.metadata.isSortable = false;
});
return this;
}
function setColumnHeaderClickActionText(text) {
_columnDefinitionMutations.columnHeaderTextTooltip = text;
return this;
}
function disableColumnHeaderClick(columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
column.headerTextDisabled = true;
}
});
return this;
}
function enableColumnHeaderClick(columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
column.headerTextDisabled = false;
}
});
return this;
}
function setColumnMaxCharacters(maxCharNum, columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
column.maxCharacters = maxCharNum;
}
});
return this;
}
function addColumnHeaderIcons(pos, icons, columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
if (!column.icons) column.icons = {};
if (pos === 'start') {
if (!column.icons.startIcons) column.icons.startIcons = [];
if (Array.isArray(icons)) {
column.icons.startIcons = column.icons.startIcons.concat(icons);
} else {
column.icons.startIcons.push(icons);
}
} else if (pos === 'end') {
if (!column.icons.endIcons) column.icons.endIcons = [];
if (Array.isArray(icons)) {
column.icons.endIcons = column.icons.endIcons.concat(icons);
} else {
column.icons.endIcons.push(icons);
}
}
}
});
return this;
}
// not support in now-list yet, dont expose
function setColumnWidth(width, columnKey) {
columnOperations.push(function(column) {
if (!columnKey || column.key === columnKey) {
column.width = width;
}
});
return this;
}
// row mutators
// should we even allow this? kind of weird experience if same
// row keeps being selected after every fetch, even if you un selected it
// dont expose for now
function setSelectedRows(rowKeys) {
rowOperations.push(function(row) {
if (!rowKeys || !Array.isArray(rowKeys)) return;
if (rowKeys.indexOf(row.key) > -1) {
row.isSelected = true;
}
});
return this;
}
// declarative actions mutators
function filterDAsRequiringSelection(actions) {
return actions.filter(function (action) {
if (action.recordSelectionRequired === true) {
return false;
}
if (action.groupedActions) {
action.groupedActions = filterDAsRequiringSelection(action.groupedActions);
if (action.groupedActions.length === 0) {
return false;
}
}
return true;
});
}
function hideDAsRequiringSelection() {
_hideDAsRequiringSelection = true;
return this;
}
function transform() {
_columnDefinitions.columns.forEach(function(column, index) {
columnOperations.forEach(function(executeOperation) {
executeOperation(column, index);
});
});
_rowDefinitions.rows.forEach(function(row) {
rowOperations.forEach(function(executeOperation) {
executeOperation(row);
if (row.children && row.children.length > 0) {
row.children.forEach(function(childRow) {
executeOperation(childRow);
});
}
});
});
if (_hideDAsRequiringSelection) {
_declarativeActions = filterDAsRequiringSelection(_declarativeActions);
}
for (var key in _columnDefinitionMutations) {
_columnDefinitions[key] = _columnDefinitionMutations[key];
}
return {
rowDefinitions: _rowDefinitions,
columnDefinitions: _columnDefinitions
};
}
return {
// constructor
initialize: initialize,
// getters/setters
get rowDefinitions() {
return getRowDefinitions();
},
setRowDefinitions: setRowDefinitions,
get columnDefinitions() {
return getColumnDefinitions();
},
setColumnDefinitions: setColumnDefinitions,
// mutators
disableLinkColumns: disableLinkColumns,
changeColumnLabel: changeColumnLabel,
disableColumnHeaderClick: disableColumnHeaderClick,
enableColumnHeaderClick: enableColumnHeaderClick,
disableSortability: disableSortability,
setColumnHeaderClickActionText: setColumnHeaderClickActionText,
removeCellFiltering: removeCellFiltering,
addColumnHeaderIcons: addColumnHeaderIcons,
setColumnMaxCharacters: setColumnMaxCharacters,
hideDAsRequiringSelection: hideDAsRequiringSelection,
// execute tranform, return model
transform: transform,
type: 'ListTransformScriptBuilder'
};
})();
Sys ID
a816a0930535a510f8777eba8d465d65