cluedin-widget
Version:
This is the project for creating and managing widgets in CluedIn.
148 lines (139 loc) • 7.22 kB
JavaScript
var stringHelper = require( '../../string' );
var validationHelper = require( '../../validation' );
var collectionHelper = require( '../../collection' );
var createPropertiesFromPromoted = function createPropertiesFromPromotedFn( properties, promotedProperties ) {
var result = [];
promotedProperties.forEach( function( promotedProperty ) {
if ( typeof promotedProperty === 'string' ) {
var value = properties[ promotedProperty ];
if ( value ) {
var name = stringHelper.createPropertyDisplayName( promotedProperty );
if ( validationHelper.isUrl( value ) || validationHelper.isEmail( value ) || ( value && promotedProperty.toLowerCase() === 'mobilenumber') ) {
result.push( {
name: promotedProperty,
isUrl: true,
value: value,
original: value,
key: stringHelper.formatDisplayName( name ).toLowerCase(),
displayName: stringHelper.formatDisplayName( name )
} );
} else {
result.push( {
isHtml: false,
name: promotedProperty,
value: value,
original: value,
key: stringHelper.formatDisplayName( name ).toLowerCase(),
displayName: stringHelper.formatDisplayName( name )
} );
}
}
} else {
if ( promotedProperty.main ) {
var valueFromMain = properties[ promotedProperty.main ];
if ( valueFromMain ) {
var nameMain = stringHelper.createPropertyDisplayName( promotedProperty.main );
if ( validationHelper.isUrl( valueFromMain ) || validationHelper.isEmail( valueFromMain ) || ( valueFromMain && promotedProperty.main.toLowerCase() === 'mobilenumber') ) {
result.push( {
name: promotedProperty.main,
value: valueFromMain,
isUrl: true,
original: valueFromMain,
displayName: stringHelper.formatDisplayName( nameMain ),
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
} else {
result.push( {
isHtml: false,
name: promotedProperty.main,
value: valueFromMain,
displayName: stringHelper.formatDisplayName( nameMain ),
original: valueFromMain,
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
}
} else {
var valuesFromParentProperties = createPropertiesFromPromotedFn( properties, promotedProperty.parentProperties );
if ( valuesFromParentProperties && valuesFromParentProperties.length > 0 ) {
result = result.concat( valuesFromParentProperties );
} else {
if ( promotedProperty.either ) {
var valueFromEither = createPropertiesFromPromotedFn( properties, promotedProperty.either );
if ( valueFromEither && valueFromEither.length > 0 ) {
result.push( valueFromEither[ 0 ] );
}
}
}
}
} else if ( promotedProperty.isColor ) {
var colorValue = properties[ promotedProperty.value ];
result.push( {
name: promotedProperty.display,
value: colorValue,
displayName: promotedProperty.display,
original: colorValue,
isColor: true,
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
} else if ( promotedProperty.contentType ) {
var contentTypeValue = properties[ promotedProperty.value ];
result.push( {
isContentType: true,
name: promotedProperty.display,
value: contentTypeValue,
displayName: promotedProperty.display,
original: contentTypeValue,
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
} else if ( promotedProperty.display ) {
var valueFromDisplay = properties[ promotedProperty.value ];
if ( promotedProperty.format ) {
valueFromDisplay = promotedProperty.format( valueFromDisplay );
}
if ( validationHelper.isUrl( valueFromDisplay ) || validationHelper.isEmail( valueFromDisplay ) || ( valueFromDisplay && promotedProperty.display.toLowerCase() === 'mobilenumber') ) {
result.push( {
name: promotedProperty.display,
value: valueFromDisplay,
isUrl: true,
displayName: promotedProperty.display,
original: properties[ promotedProperty.value ],
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
} else {
result.push( {
isHtml: false,
name: promotedProperty.display,
value: valueFromDisplay,
displayName: promotedProperty.display,
original: properties[ promotedProperty.value ],
category: promotedProperty.category,
key: promotedProperty.key,
important: promotedProperty.important
} );
}
}
else if ( promotedProperty.either ) {
var valueFromEitherDirect = createPropertiesFromPromotedFn( properties, promotedProperty.either );
if ( valueFromEitherDirect && valueFromEitherDirect.length > 0 ) {
result.push( collectionHelper.find( valueFromEitherDirect, function( prop ) {
return prop.value;
} ) );
}
}
}
} );
return result;
};
module.exports = {
createPropertiesFromPromoted
};