UNPKG

@grafana/ui

Version:
1 lines 4.73 kB
{"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/ThemeContext';\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,QAAA,EAAU,KAAA,EAAO,OAAM,KAAiC;AAC7F,EAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,EAAA,MAAM,UAAA,GAA+B;AAAA,IACnC,EAAE,KAAA,EAAO,2BAAA,CAA4B,KAAK,CAAA,EAAG,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,CAAE,MAAM,CAAA,GAAI,YAAA,GAAe,EAAA;AAAG,GAClG;AAEA,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,MAAA;AACzC,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,KAAA,EAAO,QAAA,yBAC3B,SAAA,EAAA,EAA4C,KAAA,EAAO,KAAA,CAAM,KAAA,EACtD,iBAAM,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,MAAM,OAAA,qBAC9B,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,WAAW,MAAA,CAAO;AAAA,OAAA;AAAA,MAPb,GAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,QAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,KAS7C,KAZa,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,QAAQ,EAazC,CACD,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,MAAM,kBAAkB,GAAA,CAAI;AAAA,IAC1B,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,2BACG,eAAA,EAAA,EAAgB,eAAA,EAAiB,sBAC/B,QAAA,EAAA,CAAC,EAAE,UAAS,KAAM;AACjB,MAAA,OAAO,QAAA,CAAS,EAAE,QAAA,EAAU,eAAA,EAAiB,CAAA;AAAA,IAC/C,CAAA,EACF,CAAA;AAAA,EAEJ,CAAA,MAAO;AACL,IAAA,MAAM,SAAA,GAAY,KAAA,EAAM,CAAE,CAAC,CAAA;AAC3B,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,OAAO,EAAE,GAAG,OAAO,QAAA,EAAU,QAAA,EAAU,SAAS,MAAA,EAAO;AAAA,QACvD,aAAA,EAAa,SAAA,CAAU,UAAA,CAAW,oBAAA,CAAqB,UAAA;AAAA,QAEtD,QAAA,EAAA,QAAA,CAAS,EAAE;AAAA;AAAA,KACd;AAAA,EAEJ;AACF;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,MAA0B;AAAA,EAC3C,aAAa,GAAA,CAAI;AAAA,IACf,QAAA,EAAU;AAAA,GACX;AACH,CAAA,CAAA;;;;"}