cluedin-widget
Version:
This project contains all the pages needed for browsing entities and searching them. The aim is to replace the CluedIn.Webapp project with this one when all the pages ( including the Admin page ) will be ported to REACT.
123 lines (100 loc) • 3.57 kB
JavaScript
var lodash = require( 'lodash' );
var allDefaults = void 0;
var allLayoutDefaults = void 0;
var entityConfig = {};
var layoutConfig = {};
var widgetConfigurationModel = require( './models/WidgetConfiguration' );
var layoutModel = require( './models/Layout' );
var getAllDefault = function( cb ) {
if( allDefaults ) {
return cb( null, allDefaults )
}
widgetConfigurationModel.find( { isDefault: true } ).exec( function( err, defaults ) {
allDefaults = defaults;
return cb( null, defaults );
} );
};
var getByClientId = function( clientId, cb ) {
widgetConfigurationModel.find( { owner: clientId } ).exec( function( err, widgetsPerClientId ) {
if( err ) {
return cb( err );
}
return cb( null, widgetsPerClientId );
} );
};
var getAllDefaultLayout = function( cb ) {
if( allLayoutDefaults ) {
return cb( null, allLayoutDefaults )
}
layoutModel.find( { isDefault: true } ).exec( function( err, defaults ) {
allLayoutDefaults = defaults;
return cb( null, defaults );
} );
};
var getLayoutByClientId = function( clientId, cb ) {
layoutModel.find( { owner: clientId } ).exec( function( err, layoutsPerClientId ) {
return cb( null, layoutsPerClientId );
} );
};
var getLayoutConfiguration = function( clientId, cb ) {
var result = [];
if( layoutConfig[ clientId ] ) {
return cb( null, layoutConfig[ clientId ] );
}
getAllDefaultLayout( function( err, defaults ) {
getLayoutByClientId( clientId, function( err, layouts ) {
defaults.forEach( function( defaultLayout ) {
var customizeLayout = lodash.find( layouts, function( l ) {
return defaultLayout.code === l.code;
} );
if( customizeLayout ) {
result.push( customizeLayout );
} else {
result.push( defaultLayout );
}
} );
layoutConfig[ clientId ] = result;
return cb( null, result );
} );
} );
};
var getWidgetConfiguration = function( clientId, cb ) {
var result = [];
if( entityConfig[ clientId ] ) {
return cb( null, entityConfig[ clientId ] );
}
getAllDefault( function( err, defaults ) {
getByClientId( clientId, function( err, widgets ) {
defaults.forEach( function( defaultWidget ) {
var customizedWidget = lodash.find( widgets, function( w ) {
return defaultWidget.entityType === w.entityType;
} );
if( customizedWidget ) {
result.push( customizedWidget );
} else {
result.push( defaultWidget );
}
} );
entityConfig[ clientId ] = result;
return cb( null, result );
} );
} );
};
module.exports = {
getConfiguration: function( clientId, done ) {
getWidgetConfiguration( clientId, function( err, all ) {
if( err ) {
return done( err );
}
getLayoutConfiguration( clientId, function( err, allLayouts ) {
if( err ) {
return done( err );
}
return done( null, {
widgets: all,
layouts: allLayouts
} );
} );
} );
}
};