Skip to content

Commit

Permalink
[WIP] Receive prefetched Babbage model, remove API calls
Browse files Browse the repository at this point in the history
  • Loading branch information
nightsh committed Jul 2, 2019
1 parent 5f57e07 commit 64ea071
Show file tree
Hide file tree
Showing 21 changed files with 141 additions and 165 deletions.
130 changes: 51 additions & 79 deletions src/api/index.js
Expand Up @@ -74,14 +74,6 @@ export class Api {
);
}

getPackageModel(endpoint, cube) {
return this.getJson(
this.buildUrl(endpoint, cube, 'model/')
).then((result) => {
return result.model;
});
}

getDisplayField(model, field) {
var result = field;
var dimension = _.find(model.dimensions, {
Expand All @@ -101,34 +93,21 @@ export class Api {

getMeasuresFromModel(model) {
var result = [];
_.each(model.aggregates, function(value, key) {
if (value.measure) {
result.push({
key: key,
value: value.label
});
}
});
return result;
}

getMeasures(endpoint, cube) {
var that = this;
return this.getPackageModel(endpoint, cube)
.then((model) => {
return that.getMeasuresFromModel(model);
});
}

getDimensions(endpoint, cube) {
var that = this;
return this.getPackageModel(endpoint, cube)
.then((model) => {
return that.getDimensionsFromModel(model);
if (model.aggregates) {
_.each(model.aggregates, function(value, key) {
if (value.measure) {
result.push({
key: key,
value: value.label
});
}
});
} else {
console.error('No model!', model);
}
return result;
}


getDimensionKeyById(model, id) {
// jscs:disable
return model.dimensions[id].key_ref;
Expand Down Expand Up @@ -182,34 +161,32 @@ export class Api {
return (parts.length == 2) ? parts[1] : key;
}

facts(endpoint, cube, originParams) {
facts(endpoint, cube, originParams, model) {
var that = this;
var params = _.cloneDeep(originParams) || {};
var measureFields = [];
params.page = params.page || 0;
params.pagesize = params.pagesize || 20;
var model;

return this.getPackageModel(endpoint, cube).then((packageModel) => {
model = packageModel;
var dimensions = that.getDimensionsFromModel(model);
var measures = that.getMeasuresFromModel(model);
if (!originParams.fields){
originParams.fields = [];
_.each(dimensions, (dimension) => {
originParams.fields.push(dimension.key);
});
_.each(measures, (measure) => {
originParams.fields.push(measure.value);
});
}
_.each(model.measures, (measure, key) => {
measureFields.push(key);

var dimensions = that.getDimensionsFromModel(model);
var measures = that.getMeasuresFromModel(model);

if (!originParams.fields){
originParams.fields = [];
_.each(dimensions, (dimension) => {
originParams.fields.push(dimension.key);
});
_.each(measures, (measure) => {
originParams.fields.push(measure.value);
});
}
_.each(model.measures, (measure, key) => {
measureFields.push(key);
});

var factsUrl = that.buildUrl(endpoint, cube, 'facts/', params);

var factsUrl = that.buildUrl(endpoint, cube, 'facts/', params);
return that.getJson(factsUrl);
}).then((facts) => {
return that.getJson(factsUrl).then((facts) => {
var result = {};
result.headers = [];
result.columns = [];
Expand Down Expand Up @@ -249,39 +226,36 @@ export class Api {
});
}

buildAggregateUrl(endpoint, cube, originParams) {
buildAggregateUrl(endpoint, cube, originParams, model) {
const that = this;
const params = _.cloneDeep(originParams) || {};

params.page = params.page || 0;
params.pagesize = params.pagesize || 30;

return this.getPackageModel(endpoint, cube)
.then((model) => {
const measures = that.getMeasuresFromModel(model);

if (!params.aggregates) {
params.aggregates = _.first(measures).key;
}
params.order = params.order || [{key: params.aggregates, direction: 'desc'}];
delete params.aggregates;
const measures = that.getMeasuresFromModel(model);

var newExtendedGroup = [];
_.each(params.group, (dimensionKey) => {
newExtendedGroup.push(dimensionKey);
const dimensionDisplay = that.getDisplayField(model, dimensionKey);
if (!params.aggregates) {
params.aggregates = _.first(measures).key;
}
params.order = params.order || [{key: params.aggregates, direction: 'desc'}];
delete params.aggregates;

if (newExtendedGroup.indexOf(dimensionDisplay) == -1) {
newExtendedGroup.push(dimensionDisplay);
}
});
params.group = newExtendedGroup;
var newExtendedGroup = [];
_.each(params.group, (dimensionKey) => {
newExtendedGroup.push(dimensionKey);
const dimensionDisplay = that.getDisplayField(model, dimensionKey);

return that.buildUrl(endpoint, cube, 'aggregate/', params);
if (newExtendedGroup.indexOf(dimensionDisplay) == -1) {
newExtendedGroup.push(dimensionDisplay);
}
});
params.group = newExtendedGroup;

return that.buildUrl(endpoint, cube, 'aggregate/', params);
}

aggregate(endpoint, cube, originParams) {
aggregate(endpoint, cube, originParams, model) {
var that = this;
var params = _.cloneDeep(originParams) || {};

Expand All @@ -292,11 +266,9 @@ export class Api {
var measureModelList;

return Promise.all([
that.getPackageModel(endpoint, cube),
that.buildAggregateUrl(endpoint, cube, originParams)
that.buildAggregateUrl(endpoint, cube, originParams, model)
]).then((values) => {
const model = values[0];
const aggregateUrl = values[1];
const aggregateUrl = values[0];
measures = that.getMeasuresFromModel(model);
measureModelList = _.values(model.measures);

Expand Down
3 changes: 2 additions & 1 deletion src/bindings/angular/bubbletree/index.js
Expand Up @@ -14,6 +14,7 @@ export class BubbleTreeDirective {
cube: '@',
type: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?',
Expand Down Expand Up @@ -73,7 +74,7 @@ export class BubbleTreeDirective {

$scope.$emit('babbage-ui.initialize', component);
component.build($scope.endpoint, $scope.cube,
$scope.state, wrapper);
$scope.state, wrapper, $scope.model);

$scope.$emit('babbage-ui.create');
$scope.$on('$destroy', function() {
Expand Down
4 changes: 3 additions & 1 deletion src/bindings/angular/chart/index.js
Expand Up @@ -14,6 +14,7 @@ export class ChartDirective {
cube: '@',
type: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?',
Expand Down Expand Up @@ -75,7 +76,8 @@ export class ChartDirective {
$scope.cube,
$scope.state,
wrapper,
$scope.colorScale()
$scope.colorScale(),
$scope.model
);

$scope.$emit('babbage-ui.create');
Expand Down
5 changes: 3 additions & 2 deletions src/bindings/angular/facts/index.js
Expand Up @@ -13,6 +13,7 @@ export class FactsDirective {
endpoint: '@',
cube: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?'
Expand Down Expand Up @@ -48,7 +49,7 @@ export class FactsDirective {
$q((resolve, reject) => {
component.downloader = $scope.downloader;
$scope.$emit('babbage-ui.initialize', component);
component.getTableData($scope.endpoint, $scope.cube, $scope.state)
component.getTableData($scope.endpoint, $scope.cube, $scope.state, $scope.model)
.then(resolve)
.catch(reject)
})
Expand Down Expand Up @@ -132,4 +133,4 @@ export class FactsDirective {
}
}

export default FactsDirective
export default FactsDirective
6 changes: 4 additions & 2 deletions src/bindings/angular/geoview/index.js
Expand Up @@ -18,6 +18,7 @@ export class GeoViewDirective {
cube: '@',
type: '@',
state: '=',
model: '=',
countryCode: '@',
currencySign: '@?',
downloader: '=?',
Expand Down Expand Up @@ -70,7 +71,8 @@ export class GeoViewDirective {
component.getGeoMapData(
$scope.endpoint,
$scope.cube,
$scope.state
$scope.state,
$scope.model
).then(resolve).catch(reject)
})
.then((result) => {
Expand All @@ -93,4 +95,4 @@ export class GeoViewDirective {
}
}

export default GeoViewDirective
export default GeoViewDirective
4 changes: 3 additions & 1 deletion src/bindings/angular/pie/index.js
Expand Up @@ -15,6 +15,7 @@ export class PieChartDirective {
type: '@',
maxSlices: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?',
Expand Down Expand Up @@ -78,7 +79,8 @@ export class PieChartDirective {
$scope.state,
wrapper,
$scope.maxSlices,
$scope.colorScale()
$scope.colorScale(),
$scope.model
);

$scope.$emit('babbage-ui.create');
Expand Down
5 changes: 3 additions & 2 deletions src/bindings/angular/pivottable/index.js
Expand Up @@ -17,6 +17,7 @@ export class PivotTableDirective {
endpoint: '@',
cube: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
maxValueLimit: '@?',
Expand Down Expand Up @@ -74,7 +75,7 @@ export class PivotTableDirective {
let wrapper = element.find('.pivot-table')[0];
component.downloader = $scope.downloader;
$scope.$emit('babbage-ui.initialize', component);
component.getPivotData($scope.endpoint, $scope.cube, $scope.state)
component.getPivotData($scope.endpoint, $scope.cube, $scope.state, $scope.model)
.then((result) => {
let limit = parseInt($scope.maxValueLimit, 10) || 0;
if (
Expand Down Expand Up @@ -107,4 +108,4 @@ export class PivotTableDirective {
}
}

export default PivotTableDirective
export default PivotTableDirective
6 changes: 4 additions & 2 deletions src/bindings/angular/radar/index.js
Expand Up @@ -13,6 +13,7 @@ export class RadarChartDirective {
endpoint: '@',
cube: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?',
Expand Down Expand Up @@ -68,7 +69,8 @@ export class RadarChartDirective {
$scope.cube,
$scope.state,
wrapper,
$scope.colorScale()
$scope.colorScale(),
$scope.model
);

$scope.$emit('babbage-ui.create');
Expand All @@ -82,4 +84,4 @@ export class RadarChartDirective {
}
}

export default RadarChartDirective
export default RadarChartDirective
6 changes: 4 additions & 2 deletions src/bindings/angular/sankey/index.js
Expand Up @@ -13,6 +13,7 @@ export class SanKeyChartDirective {
endpoint: '@',
cube: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?',
Expand Down Expand Up @@ -73,7 +74,8 @@ export class SanKeyChartDirective {
$scope.cube,
$scope.state,
wrapper,
$scope.colorScale()
$scope.colorScale(),
$scope.model
);

$scope.$emit('babbage-ui.create');
Expand All @@ -87,4 +89,4 @@ export class SanKeyChartDirective {
}
}

export default SanKeyChartDirective
export default SanKeyChartDirective
6 changes: 4 additions & 2 deletions src/bindings/angular/table/index.js
Expand Up @@ -13,6 +13,7 @@ export class BabbageTableDirective {
endpoint: '@',
cube: '@',
state: '=',
model: '=',
downloader: '=?',
formatValue: '=?',
messages: '=?'
Expand All @@ -28,6 +29,7 @@ export class BabbageTableDirective {
cutoff: 0
};


$scope.i18n = createI18NMapper($scope.messages);
$scope.$watch('messages', function(newValue, oldValue) {
if (newValue !== oldValue) {
Expand Down Expand Up @@ -66,7 +68,7 @@ export class BabbageTableDirective {
$q((resolve, reject) => {
component.downloader = $scope.downloader;
$scope.$emit('babbage-ui.initialize', component);
component.getTableData($scope.endpoint, $scope.cube, $scope.state)
component.getTableData($scope.endpoint, $scope.cube, $scope.state, $scope.model)
.then(resolve)
.catch(reject)
})
Expand All @@ -85,4 +87,4 @@ export class BabbageTableDirective {
}
}

export default BabbageTableDirective
export default BabbageTableDirective

0 comments on commit 64ea071

Please sign in to comment.