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

Offical Documentation

Official Docs: