@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
113 lines (112 loc) • 4.29 kB
JavaScript
import { isAgChartDefinition, isExternalChartDefinition, } from '../../AdaptableState/ChartingState';
import StringExtensions from '../Extensions/StringExtensions';
export function closeAgChartDefinitionIfOpen(api, chartDefinition) {
const chartId = chartDefinition?.Model?.chartId;
if (!chartId) {
return;
}
const chartRef = api.chartingApi.getChartRef(chartId);
chartRef?.destroyChart();
}
export function closeExternalChartDefinitionIfOpen(api, chartDefinition) {
if (api.chartingApi.internalApi.isExternalChartOpened(chartDefinition)) {
api.chartingApi.internalApi.onHideExternalChart(chartDefinition);
}
}
export function closeChartDefinitionIfOpen(api, chartDefinition) {
if (isAgChartDefinition(chartDefinition)) {
closeAgChartDefinitionIfOpen(api, chartDefinition);
}
else if (isExternalChartDefinition(chartDefinition)) {
closeExternalChartDefinitionIfOpen(api, chartDefinition);
}
}
export function closeAllOpenAgCharts(api) {
api.chartingApi.getCurrentChartModels().forEach((model) => {
api.chartingApi.getChartRef(model.chartId)?.destroyChart();
});
}
export function isChartNameTaken(api, name, excludeUuid) {
const trimmedName = name?.trim();
if (!trimmedName) {
return false;
}
return [...api.chartingApi.getChartDefinitions(), ...api.chartingApi.getExternalChartDefinitions()]
.filter((chart) => chart.Uuid !== excludeUuid)
.some((chart) => chart.Name === trimmedName);
}
export function validateChartName(api, name, excludeUuid) {
const trimmedName = name?.trim();
if (!trimmedName) {
return 'A name is required.';
}
if (isChartNameTaken(api, trimmedName, excludeUuid)) {
return 'A chart with this name already exists.';
}
return true;
}
export function resolveAgChartDefinitionByName(api, chartName) {
if (!StringExtensions.IsNotNullOrEmpty(chartName)) {
return undefined;
}
return api.chartingApi.getChartDefinitionByName(chartName.trim());
}
function resolveChartDefinitionsToRestore(api, restoreChartsOnReady) {
const allCharts = api.chartingApi.getChartDefinitions();
if (!restoreChartsOnReady) {
return [];
}
if (restoreChartsOnReady === true || restoreChartsOnReady === 'all') {
return allCharts;
}
if (Array.isArray(restoreChartsOnReady)) {
return restoreChartsOnReady
.map((chartName) => resolveAgChartDefinitionByName(api, chartName))
.filter(Boolean);
}
return [];
}
function resolveContainerElement(api, containerName) {
if (!StringExtensions.IsNotNullOrEmpty(containerName)) {
return undefined;
}
const chartingOptions = api.optionsApi.getChartingOptions();
if (containerName === chartingOptions.agGridContainerName) {
return undefined;
}
return api.chartingApi.internalApi.getContainerElemetnByName(containerName) ?? undefined;
}
export function showChartDefinitions(api, chartDefinitions, openCharts) {
const refs = [];
chartDefinitions.forEach((chartDefinition) => {
const openSpec = openCharts?.find((openChart) => openChart.ChartName === chartDefinition.Name);
const container = resolveContainerElement(api, openSpec?.ContainerName);
const chartRef = api.chartingApi.showChartDefinitionOnce(chartDefinition, container);
if (chartRef) {
refs.push(chartRef);
}
});
return refs;
}
export function restoreChartsOnReady(api) {
const chartingOptions = api.optionsApi.getChartingOptions();
const chartsToRestore = resolveChartDefinitionsToRestore(api, chartingOptions.restoreChartsOnReady);
if (!chartsToRestore.length) {
return;
}
showChartDefinitions(api, chartsToRestore);
}
export function openLayoutCharts(api, layout) {
if (!layout || layout.OpenCharts === undefined) {
return;
}
closeAllOpenAgCharts(api);
if (!layout.OpenCharts.length) {
return;
}
const chartsToOpen = layout.OpenCharts.map((openChart) => resolveAgChartDefinitionByName(api, openChart.ChartName)).filter(Boolean);
if (!chartsToOpen.length) {
return;
}
showChartDefinitions(api, chartsToOpen, layout.OpenCharts);
}