Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Receive prefetched Babbage model, remove API calls #76

Merged
merged 2 commits into from Sep 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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