{"version":3,"file":"DataLinksContextMenu.mjs","sources":["../../../../src/components/DataLinks/DataLinksContextMenu.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { ActionModel, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes';\nimport { linkModelToContextMenuItems } from '../../utils/dataLinks';\nimport { WithContextMenu } from '../ContextMenu/WithContextMenu';\nimport { MenuGroup, MenuItemsGroup } from '../Menu/MenuGroup';\nimport { MenuItem } from '../Menu/MenuItem';\n\nexport interface DataLinksContextMenuProps {\n  children: (props: DataLinksContextMenuApi) => JSX.Element;\n  links: () => LinkModel[];\n  style?: CSSProperties;\n  /**\n   * @deprecated Will be removed in a future version\n   */\n  actions?: ActionModel[];\n}\n\nexport interface DataLinksContextMenuApi {\n  openMenu?: React.MouseEventHandler<HTMLOrSVGElement>;\n  targetClassName?: string;\n}\n\nexport const DataLinksContextMenu = ({ children, links, style }: DataLinksContextMenuProps) => {\n  const styles = useStyles2(getStyles);\n\n  const itemsGroup: MenuItemsGroup[] = [\n    { items: linkModelToContextMenuItems(links), label: Boolean(links().length) ? 'Data links' : '' },\n  ];\n\n  const linksCounter = itemsGroup[0].items.length;\n  const renderMenuGroupItems = () => {\n    return itemsGroup.map((group, groupIdx) => (\n      <MenuGroup key={`${group.label}${groupIdx}`} label={group.label}>\n        {(group.items || []).map((item, itemIdx) => (\n          <MenuItem\n            key={`${group.label}-${groupIdx}-${itemIdx}}`}\n            url={item.url}\n            label={item.label}\n            target={item.target}\n            icon={item.icon}\n            active={item.active}\n            onClick={item.onClick}\n            className={styles.itemWrapper}\n          />\n        ))}\n      </MenuGroup>\n    ));\n  };\n\n  // Use this class name (exposed via render prop) to add context menu indicator to the click target of the visualization\n  const targetClassName = css({\n    cursor: 'context-menu',\n  });\n\n  if (linksCounter > 1) {\n    return (\n      <WithContextMenu renderMenuItems={renderMenuGroupItems}>\n        {({ openMenu }) => {\n          return children({ openMenu, targetClassName });\n        }}\n      </WithContextMenu>\n    );\n  } else {\n    const linkModel = links()[0];\n    return (\n      <a\n        href={linkModel.href}\n        onClick={linkModel.onClick}\n        target={linkModel.target}\n        title={linkModel.title}\n        style={{ ...style, overflow: 'hidden', display: 'flex' }}\n        data-testid={selectors.components.DataLinksContextMenu.singleLink}\n      >\n        {children({})}\n      </a>\n    );\n  }\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  itemWrapper: css({\n    fontSize: 12,\n  }),\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA4BO,MAAM,uBAAuB,CAAC,EAAE,QAAU,EAAA,KAAA,EAAO,OAAuC,KAAA;AAC7F,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EAAA,MAAM,UAA+B,GAAA;AAAA,IACnC,EAAE,KAAA,EAAO,2BAA4B,CAAA,KAAK,CAAG,EAAA,KAAA,EAAO,OAAQ,CAAA,KAAA,EAAQ,CAAA,MAAM,CAAI,GAAA,YAAA,GAAe,EAAG;AAAA,GAClG;AAEA,EAAA,MAAM,YAAe,GAAA,UAAA,CAAW,CAAC,CAAA,CAAE,KAAM,CAAA,MAAA;AACzC,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,OAAO,WAAW,GAAI,CAAA,CAAC,KAAO,EAAA,QAAA,yBAC3B,SAA4C,EAAA,EAAA,KAAA,EAAO,KAAM,CAAA,KAAA,EACtD,iBAAM,KAAS,IAAA,IAAI,GAAI,CAAA,CAAC,MAAM,OAC9B,qBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,KAAK,IAAK,CAAA,GAAA;AAAA,QACV,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,QAAQ,IAAK,CAAA,MAAA;AAAA,QACb,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,QAAQ,IAAK,CAAA,MAAA;AAAA,QACb,SAAS,IAAK,CAAA,OAAA;AAAA,QACd,WAAW,MAAO,CAAA;AAAA,OAAA;AAAA,MAPb,GAAG,KAAM,CAAA,KAAK,CAAI,CAAA,EAAA,QAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,KAS7C,KAZa,CAAG,EAAA,KAAA,CAAM,KAAK,CAAG,EAAA,QAAQ,EAazC,CACD,CAAA;AAAA,GACH;AAGA,EAAA,MAAM,kBAAkB,GAAI,CAAA;AAAA,IAC1B,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,IAAI,eAAe,CAAG,EAAA;AACpB,IAAA,2BACG,eAAgB,EAAA,EAAA,eAAA,EAAiB,sBAC/B,QAAC,EAAA,CAAA,EAAE,UAAe,KAAA;AACjB,MAAA,OAAO,QAAS,CAAA,EAAE,QAAU,EAAA,eAAA,EAAiB,CAAA;AAAA,KAEjD,EAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAM,MAAA,SAAA,GAAY,KAAM,EAAA,CAAE,CAAC,CAAA;AAC3B,IACE,uBAAA,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,MAAM,SAAU,CAAA,IAAA;AAAA,QAChB,SAAS,SAAU,CAAA,OAAA;AAAA,QACnB,QAAQ,SAAU,CAAA,MAAA;AAAA,QAClB,OAAO,SAAU,CAAA,KAAA;AAAA,QACjB,OAAO,EAAE,GAAG,OAAO,QAAU,EAAA,QAAA,EAAU,SAAS,MAAO,EAAA;AAAA,QACvD,aAAA,EAAa,SAAU,CAAA,UAAA,CAAW,oBAAqB,CAAA,UAAA;AAAA,QAEtD,QAAA,EAAA,QAAA,CAAS,EAAE;AAAA;AAAA,KACd;AAAA;AAGN;AAEA,MAAM,SAAA,GAAY,CAAC,KAA0B,MAAA;AAAA,EAC3C,aAAa,GAAI,CAAA;AAAA,IACf,QAAU,EAAA;AAAA,GACX;AACH,CAAA,CAAA;;;;"}