Home Reference Source Repository

lib/utils/propertyHelper.js

//TODO: Move most of this functionality to the component or something like that :|
export function columnPropertiesFromArray(columns) {
  //TODO: Make this more efficient -- this is just kind of make it work at this point
  let properties = {};
  columns.forEach(column => properties[column] = ({id: column}));

  return properties;
}

export function buildColumnProperties({ rowProperties, allColumns, defaultColumns}) {
  let columnProperties = defaultColumns ? columnPropertiesFromArray(defaultColumns) : {};

  if(rowProperties && rowProperties.props && !!rowProperties.props.children && Array.isArray(rowProperties.props.children)) {
    columnProperties = rowProperties.props.children.reduce((previous, current) => {
      previous[current.props.id] = current.props; return previous;
    }, columnProperties)
  } else if (rowProperties && rowProperties.props && rowProperties.props.children) {
  //if just an object
    columnProperties[rowProperties.props.children.props.id] = rowProperties.props.children.props;
  }

  //TODO: Don't check this this way :|
  if(Object.keys(columnProperties).length === 0 && allColumns) {
    columnProperties = columnPropertiesFromArray(allColumns);
  }

  return columnProperties;
}

const PropertyHelper = {
  propertiesToJS({ rowProperties, allColumns, defaultColumns, ignoredColumns=[] }) {
    const getHiddenColumns = columnProperties => {
      const visibleKeys = Object.keys(columnProperties);
      const hiddenColumns = allColumns.filter(column => visibleKeys.indexOf(column) < 0);

      let hiddenColumnProperties = {};
      hiddenColumns.forEach(column => hiddenColumnProperties[column] = {id: column});

      return hiddenColumnProperties;
    }

    const ignoredColumnsWithChildren = ignoredColumns.indexOfChildren > -1 ? ignoredColumns : [...ignoredColumns, 'children']
    //if we don't have children return an empty metatdata object
    if(!rowProperties) {
      const columnProperties = columnPropertiesFromArray(defaultColumns || allColumns);
      const hiddenColumnProperties = getHiddenColumns(columnProperties);

      return {
        rowProperties: null,
        columnProperties,
        ignoredColumns: ignoredColumnsWithChildren,
        hiddenColumnProperties: hiddenColumnProperties
      };
    }
    const columnProperties = buildColumnProperties({ rowProperties, allColumns, defaultColumns });

    var rowProps = Object.assign({}, rowProperties.props);
    delete rowProps.children;

    if (!rowProps.hasOwnProperty('childColumnName')) {
      rowProps.childColumnName = 'children';
    }

    const hiddenColumnProperties = getHiddenColumns(columnProperties);

    //make sure that children is in the ignored column list

    return {
      rowProperties: rowProps,
      columnProperties,
      hiddenColumnProperties,
      ignoredColumns: ignoredColumnsWithChildren,
      metadataColumn: '__metadata'
    };
  }
};

export default PropertyHelper;