{"version":3,"file":"dataLink.mjs","sources":["../../../src/types/dataLink.ts"],"sourcesContent":["import { ScopedVars } from './ScopedVars';\nimport { ExploreCorrelationHelperData, ExplorePanelsState } from './explore';\nimport { LinkTarget } from './linkTarget';\nimport { InterpolateFunction } from './panel';\nimport { DataQuery } from './query';\nimport { TimeRange } from './time';\n\n/**\n * Callback info for DataLink click events\n */\nexport interface DataLinkClickEvent<T = any> {\n  origin: T;\n  replaceVariables: InterpolateFunction | undefined;\n  e?: any; // mouse|react event\n}\n\n/**\n * Data Links can be created by data source plugins or correlations.\n * Origin is set in DataLink object and indicates where the link was created.\n */\nexport enum DataLinkConfigOrigin {\n  Datasource = 'Datasource',\n  Correlations = 'Correlations',\n  ExploreCorrelationsEditor = 'CorrelationsEditor',\n}\n\n/**\n * Link configuration. The values may contain variables that need to be\n * processed before showing the link to user.\n *\n * TODO: <T extends DataQuery> is not strictly true for internal links as we do not need refId for example but all\n *  data source defined queries extend this so this is more for documentation.\n */\nexport interface DataLink<T extends DataQuery = any> {\n  title: string;\n  targetBlank?: boolean;\n\n  // 3: The URL if others did not set it first\n  url: string;\n\n  // 2: If exists, use this to construct the URL\n  // Not saved in JSON/DTO\n  onBuildUrl?: (event: DataLinkClickEvent) => string;\n\n  // 1: If exists, handle click directly\n  // Not saved in JSON/DTO\n  onClick?: (event: DataLinkClickEvent) => void;\n\n  // If dataLink represents internal link this has to be filled. Internal link is defined as a query in a particular\n  // data source that we want to show to the user. Usually this results in a link to explore but can also lead to\n  // more custom onClick behaviour if needed.\n  // @internal and subject to change in future releases\n  internal?: InternalDataLink<T>;\n\n  origin?: DataLinkConfigOrigin;\n  meta?: {\n    correlationData?: ExploreCorrelationHelperData;\n    transformations?: DataLinkTransformationConfig[];\n  };\n\n  oneClick?: boolean;\n}\n\n/**\n * We provide tooltips with information about these to guide the user, please\n * check for validity when adding more transformation types.\n *\n * @internal\n */\nexport enum SupportedTransformationType {\n  Regex = 'regex',\n  Logfmt = 'logfmt',\n}\n\n/** @internal */\nexport interface DataLinkTransformationConfig {\n  type: SupportedTransformationType;\n  field?: string;\n  expression?: string;\n  mapValue?: string;\n}\n\n/** @internal */\nexport interface InternalDataLink<T extends DataQuery = any> {\n  query: T | ((options: { replaceVariables: InterpolateFunction; scopedVars: ScopedVars }) => T);\n  datasourceUid: string;\n  datasourceName: string; // used as a title if `DataLink.title` is empty\n  panelsState?: ExplorePanelsState;\n  range?: TimeRange;\n}\n\n/**\n * Processed Link Model. The values are ready to use\n */\nexport interface LinkModel<T = any> {\n  href: string;\n  title: string;\n  target: LinkTarget;\n  origin: T;\n\n  // When a click callback exists, this is passed the raw mouse|react event\n  onClick?: (e: any, origin?: any) => void;\n  oneClick?: boolean;\n\n  /**\n   * @alpha\n   */\n  interpolatedParams?: {\n    query?: DataQuery;\n    timeRange?: TimeRange;\n  };\n}\n\n/**\n * Provides a way to produce links on demand\n *\n * TODO: ScopedVars in in GrafanaUI package!\n */\nexport interface LinkModelSupplier<T extends object> {\n  getLinks(replaceVariables?: InterpolateFunction): Array<LinkModel<T>>;\n}\n\nexport enum VariableOrigin {\n  Series = 'series',\n  Field = 'field',\n  Fields = 'fields',\n  Value = 'value',\n  BuiltIn = 'built-in',\n  Template = 'template',\n}\n\nexport interface VariableSuggestion {\n  value: string;\n  label: string;\n  documentation?: string;\n  origin: VariableOrigin;\n}\n\nexport enum VariableSuggestionsScope {\n  Values = 'values',\n}\n\nexport enum OneClickMode {\n  Action = 'action',\n  Link = 'link',\n  Off = 'off',\n}\n"],"names":["DataLinkConfigOrigin","SupportedTransformationType","VariableOrigin","VariableSuggestionsScope","OneClickMode"],"mappings":";AAoBO,IAAK,oBAAA,qBAAAA,qBAAAA,KAAL;AACL,EAAAA,sBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,sBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,sBAAA,2BAAA,CAAA,GAA4B,oBAAA;AAHlB,EAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAiDL,IAAK,2BAAA,qBAAAC,4BAAAA,KAAL;AACL,EAAAA,6BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,6BAAA,QAAA,CAAA,GAAS,QAAA;AAFC,EAAA,OAAAA,4BAAAA;AAAA,CAAA,EAAA,2BAAA,IAAA,EAAA;AAqDL,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,gBAAA,SAAA,CAAA,GAAU,UAAA;AACV,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AAND,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAgBL,IAAK,wBAAA,qBAAAC,yBAAAA,KAAL;AACL,EAAAA,0BAAA,QAAA,CAAA,GAAS,QAAA;AADC,EAAA,OAAAA,yBAAAA;AAAA,CAAA,EAAA,wBAAA,IAAA,EAAA;AAIL,IAAK,YAAA,qBAAAC,aAAAA,KAAL;AACL,EAAAA,cAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,cAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,cAAA,KAAA,CAAA,GAAM,KAAA;AAHI,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;;;;"}