UNPKG

@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
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); }