mirror of https://github.com/grafana/grafana.git
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { DataFrame, ActionModel, Field, InterpolateFunction, LinkModel } from '@grafana/data';
|
|
import { getActions } from 'app/features/actions/utils';
|
|
|
|
export const getDataLinks = (field: Field, rowIdx: number) => {
|
|
const links: Array<LinkModel<Field>> = [];
|
|
|
|
if ((field.config.links?.length ?? 0) > 0 && field.getLinks != null) {
|
|
const v = field.values[rowIdx];
|
|
const disp = field.display ? field.display(v) : { text: `${v}`, numeric: +v };
|
|
|
|
const linkLookup = new Set<string>();
|
|
|
|
field.getLinks({ calculatedValue: disp, valueRowIndex: rowIdx }).forEach((link) => {
|
|
const key = `${link.title}/${link.href}`;
|
|
if (!linkLookup.has(key)) {
|
|
links.push(link);
|
|
linkLookup.add(key);
|
|
}
|
|
});
|
|
}
|
|
|
|
return links;
|
|
};
|
|
|
|
export const getAllFrameActions = (dataFrame: DataFrame) => {};
|
|
|
|
export const getFieldActions = (
|
|
dataFrame: DataFrame,
|
|
field: Field,
|
|
replaceVars: InterpolateFunction,
|
|
rowIndex: number
|
|
) => {
|
|
const actions: Array<ActionModel<Field>> = [];
|
|
const actionLookup = new Set<string>();
|
|
|
|
if (field.state?.scopedVars) {
|
|
const actionsModel = getActions(
|
|
dataFrame,
|
|
field,
|
|
field.state!.scopedVars!,
|
|
replaceVars,
|
|
field.config.actions ?? [],
|
|
{
|
|
valueRowIndex: rowIndex,
|
|
}
|
|
);
|
|
|
|
actionsModel.forEach((action) => {
|
|
const key = `${action.title}`;
|
|
if (!actionLookup.has(key)) {
|
|
actions.push(action);
|
|
actionLookup.add(key);
|
|
}
|
|
});
|
|
} else {
|
|
console.warn('no scoped vars!', field);
|
|
}
|
|
|
|
return actions;
|
|
};
|