UNPKG

cluedin-widget

Version:

This is the project for creating and managing widgets in CluedIn.

148 lines (139 loc) 7.22 kB
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 };