@grafana/ui
Version:
Grafana Components Library
1 lines • 4.7 kB
Source Map (JSON)
{"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;;;;"}