@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
118 lines (117 loc) • 4.94 kB
JavaScript
import * as InternalRedux from '../../Redux/ActionsReducers/InternalRedux';
import ObjectFactory from '../ObjectFactory';
export class ChartingService {
constructor(api) {
this.api = api;
}
onChartModelChange(models, eventType, params) {
const allChartDefinitions = this.api.chartingApi.getChartDefinitions();
const currentChartModel = models.find((model) => model.chartId === params.chartId);
const currentChartDefinition = allChartDefinitions.find((chartDefinition) => chartDefinition.Model.chartId === params.chartId);
switch (eventType) {
case 'chartCreated':
const createParams = params;
if (allChartDefinitions.some((chartDefinition) => chartDefinition.Model.chartId === createParams.chartId)) {
// chart already exists
}
else {
const chartModel = models.find((model) => model.chartId === createParams.chartId);
this.saveNewChart(chartModel);
}
break;
case 'chartOptionsChanged':
case 'chartRangeSelectionChanged':
if (!currentChartDefinition) {
// editing a non-saved chart
break;
}
const updatedChartDefinition = {
...currentChartDefinition,
Model: currentChartModel,
};
this.api.chartingApi.editChartDefinition(updatedChartDefinition);
break;
}
this.api.internalApi.dispatchReduxAction(InternalRedux.ChartingSetCurrentChartModels(models));
this.emitAdaptableChartDefinitonChange();
}
/**
* Emit events only for adaptable charting definition changes
* - an adaptable chart opens
* - an adaptable chart closes
* - an adaptable chart is created
* - an adaptable chart is deleted
*/
emitAdaptableChartDefinitonChange() {
const chartingOpenState = this.api.chartingApi.getChartingOpenState();
const chartChangedInfo = {
chartingOpenState: chartingOpenState,
...this.api.internalApi.buildBaseContext(),
};
this.api.eventApi.emit('ChartChanged', chartChangedInfo);
}
saveNewChart(chartModel) {
const chartingOptions = this.api.optionsApi.getChartingOptions() ?? {};
const saveStragegy = chartingOptions.saveChartBehaviour ?? 'manual';
if (saveStragegy === 'none') {
return;
}
if (saveStragegy === 'manual') {
const alert = {
alertType: 'generic',
header: 'Save chart',
message: 'Do you want to save this Chart?',
alertDefinition: {
...ObjectFactory.CreateEmptyAlertDefinition(),
MessageType: 'Info',
AlertProperties: {
DisplayNotification: true,
NotificationDuration: 'always',
},
AlertForm: {
Buttons: [
{
Label: 'Save',
Command: (context) => {
const chartName = context.formData.name || chartModel.chartId;
this.api.chartingApi.addChartDefinition(ObjectFactory.CreateEmptyChartDefinition({
Name: chartName,
Model: chartModel,
}));
},
ButtonStyle: {
tone: 'info',
variant: 'raised',
},
},
{
Label: 'Dismiss',
ButtonStyle: {
tone: 'neutral',
variant: 'raised',
},
},
],
fields: [
{
name: 'name',
label: 'Name',
fieldType: 'text',
},
],
},
},
};
this.api.alertApi.displayAdaptableAlert(alert);
}
else if (saveStragegy === 'auto') {
this.api.chartingApi.addChartDefinition(ObjectFactory.CreateEmptyChartDefinition({
Name: chartModel.chartId,
Model: chartModel,
}));
}
}
destroy() {
this.api = null;
}
}