import { SelectableValue } from '@grafana/data'; import { DataFrame, GrafanaTheme2 } from '@grafana/data/src'; import { getColorDimension, getScalarDimension, getScaledDimension, getTextDimension } from 'app/features/dimensions'; import { getGrafanaDatasource } from 'app/plugins/datasource/grafana/datasource'; import { defaultStyleConfig, StyleConfig, StyleConfigState, StyleDimensions } from '../style/types'; export function getStyleDimension( frame: DataFrame | undefined, style: StyleConfigState, theme: GrafanaTheme2, customStyleConfig?: StyleConfig ) { const dims: StyleDimensions = {}; if (customStyleConfig && Object.keys(customStyleConfig).length) { dims.color = getColorDimension(frame, customStyleConfig.color ?? defaultStyleConfig.color, theme); dims.size = getScaledDimension(frame, customStyleConfig.size ?? defaultStyleConfig.size); dims.rotation = getScalarDimension(frame, customStyleConfig.rotation ?? defaultStyleConfig.rotation); if (customStyleConfig.text && (customStyleConfig.text.field || customStyleConfig.text.fixed)) { dims.text = getTextDimension(frame, customStyleConfig.text!); } } else { if (style.fields) { if (style.fields.color) { dims.color = getColorDimension(frame, style.config.color ?? defaultStyleConfig.color, theme); } if (style.fields.size) { dims.size = getScaledDimension(frame, style.config.size ?? defaultStyleConfig.size); } if (style.fields.text) { dims.text = getTextDimension(frame, style.config.text!); } if (style.fields.rotation) { dims.rotation = getScalarDimension(frame, style.config.rotation ?? defaultStyleConfig.rotation); } } } return dims; } let publicGeoJSONFiles: Array> | undefined = undefined; export function getPublicGeoJSONFiles(): Array> { if (!publicGeoJSONFiles) { publicGeoJSONFiles = []; initGeojsonFiles(); // async } return publicGeoJSONFiles; } // This will find all geojson files in the maps and gazetteer folders async function initGeojsonFiles() { const ds = await getGrafanaDatasource(); for (let folder of ['maps', 'gazetteer']) { ds.listFiles(folder).subscribe({ next: (frame) => { frame.forEach((item) => { if (item.name.endsWith('.geojson')) { const value = `public/${folder}/${item.name}`; publicGeoJSONFiles!.push({ value, label: value, }); } }); }, }); } }