Skip to content

Commit f1eabc4

Browse files
phixMephix
andauthored
Web: Tooltips and display updates (#2809)
* Updating tooltips and fixing rendering issue in column lineage table display. * Icons for jobs and datasets on lineage panels. --------- Co-authored-by: phix <peter.hicks@astronomer.io>
1 parent b29be3d commit f1eabc4

8 files changed

Lines changed: 175 additions & 52 deletions

File tree

web/src/components/core/text/MqText.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import React, { ReactElement } from 'react'
55

6-
import { Box } from '@mui/system'
6+
import { Box, SxProps } from '@mui/system'
77
import { Link as LinkRouter } from 'react-router-dom'
88
import { THEME_EXTRA } from '../../../helpers/theme'
99
import { Typography } from '@mui/material'
@@ -30,6 +30,8 @@ interface OwnProps {
3030
font?: 'primary' | 'mono'
3131
small?: boolean
3232
bottomMargin?: boolean
33+
block?: boolean
34+
sx?: SxProps
3335
children: ReactElement | (string | ReactElement)[] | string | string[] | number | undefined | null
3436
onClick?: () => void
3537
}
@@ -56,7 +58,9 @@ const MqText: React.FC<MqTextProps> = ({
5658
highlight,
5759
color,
5860
small,
61+
block,
5962
onClick,
63+
sx,
6064
}) => {
6165
const theme = createTheme(useTheme())
6266

@@ -87,6 +91,9 @@ const MqText: React.FC<MqTextProps> = ({
8791
bold: {
8892
fontWeight: 700,
8993
},
94+
block: {
95+
display: 'block',
96+
},
9097
subdued: {
9198
color: THEME_EXTRA.typography.subdued,
9299
},
@@ -140,6 +147,7 @@ const MqText: React.FC<MqTextProps> = ({
140147
inline ? classesObject.inline : {},
141148
small ? classesObject.small : {},
142149
link ? classesObject.link : {},
150+
block ? classesObject.block : {},
143151
paragraph ? classesObject.paragraph : {},
144152
subheading ? classesObject.subheading : {},
145153
overflowHidden ? classesObject.overflowHidden : {}
@@ -154,7 +162,10 @@ const MqText: React.FC<MqTextProps> = ({
154162
<Typography
155163
onClick={onClick}
156164
variant='h4'
157-
sx={Object.assign(classesObject.root, classesObject.heading, conditionalClasses)}
165+
sx={{
166+
...Object.assign(classesObject.root, classesObject.heading, conditionalClasses),
167+
...sx,
168+
}}
158169
style={style}
159170
>
160171
{children}
@@ -170,7 +181,10 @@ const MqText: React.FC<MqTextProps> = ({
170181
>
171182
<Box
172183
component='span'
173-
sx={Object.assign(classesObject.root, classesObject.link, conditionalClasses)}
184+
sx={{
185+
...Object.assign(classesObject.root, classesObject.link, conditionalClasses),
186+
...sx,
187+
}}
174188
>
175189
{children}
176190
</Box>
@@ -183,7 +197,10 @@ const MqText: React.FC<MqTextProps> = ({
183197
href={href}
184198
target={'_blank'}
185199
rel='noopener noreferrer'
186-
sx={Object.assign(classesObject.root, classesObject.link, conditionalClasses)}
200+
sx={{
201+
...Object.assign(classesObject.root, classesObject.link, conditionalClasses),
202+
...sx,
203+
}}
187204
>
188205
{children}
189206
</Link>
@@ -192,7 +209,7 @@ const MqText: React.FC<MqTextProps> = ({
192209
return (
193210
<Box
194211
onClick={onClick}
195-
sx={Object.assign(classesObject.root, conditionalClasses)}
212+
sx={{ ...Object.assign(classesObject.root, conditionalClasses), ...sx }}
196213
style={style}
197214
>
198215
{children}

web/src/components/core/tooltip/MQTooltip.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,27 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import { createTheme } from '@mui/material/styles'
5-
import { grey } from '@mui/material/colors'
5+
import { darken } from '@mui/material'
66
import { useTheme } from '@emotion/react'
77
import React, { ReactElement } from 'react'
88
import Tooltip from '@mui/material/Tooltip'
99

1010
interface MqToolTipProps {
1111
title: string | ReactElement
1212
children: ReactElement
13-
placement?: 'left' | 'right' | 'top'
13+
placement?:
14+
| 'left'
15+
| 'right'
16+
| 'top'
17+
| 'right-end'
18+
| 'left-end'
19+
| 'top-end'
20+
| 'bottom'
21+
| 'bottom-end'
22+
| 'top-start'
23+
| 'bottom-start'
24+
| 'left-start'
25+
| 'right-start'
1426
}
1527

1628
const MQTooltip: React.FC<MqToolTipProps> = ({ title, children, placement }) => {
@@ -22,9 +34,8 @@ const MQTooltip: React.FC<MqToolTipProps> = ({ title, children, placement }) =>
2234
componentsProps={{
2335
tooltip: {
2436
sx: {
25-
backgroundColor: `${theme.palette.common.white}`,
26-
color: grey['900'],
27-
border: `1px solid ${theme.palette.common.white}`,
37+
backgroundColor: `${darken(theme.palette.background.paper, 0.1)}`,
38+
color: theme.palette.common.white,
2839
maxWidth: '600px',
2940
fontSize: 14,
3041
},

web/src/components/datasets/DatasetDetailPage.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
import { CalendarIcon } from '@mui/x-date-pickers'
1717
import { CircularProgress } from '@mui/material'
1818
import { Dataset, DatasetVersion } from '../../types/api'
19+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
1920
import { IState } from '../../store/reducers'
2021
import { LineageDataset } from '../../types/lineage'
2122
import { MqInfo } from '../core/info/MqInfo'
@@ -32,7 +33,9 @@ import {
3233
resetDatasetVersions,
3334
setTabIndex,
3435
} from '../../store/actionCreators'
36+
import { faDatabase } from '@fortawesome/free-solid-svg-icons'
3537
import { formatUpdatedAt } from '../../helpers'
38+
import { truncateText } from '../../helpers/text'
3639
import { useNavigate, useSearchParams } from 'react-router-dom'
3740
import { useTheme } from '@emotion/react'
3841
import CloseIcon from '@mui/icons-material/Close'
@@ -159,9 +162,29 @@ const DatasetDetailPage: FunctionComponent<IProps> = (props) => {
159162
)}
160163
<Box display={'flex'} alignItems={'center'}>
161164
<Box>
162-
<MqText heading font={'mono'}>
163-
{name}
164-
</MqText>
165+
<Box display={'flex'} alignItems={'center'}>
166+
<Box
167+
mr={2}
168+
borderRadius={theme.spacing(1)}
169+
p={1}
170+
width={32}
171+
height={32}
172+
display={'flex'}
173+
bgcolor={theme.palette.info.main}
174+
>
175+
<FontAwesomeIcon
176+
aria-hidden={'true'}
177+
title={'Dataset'}
178+
icon={faDatabase}
179+
width={16}
180+
height={16}
181+
color={theme.palette.common.white}
182+
/>
183+
</Box>
184+
<MqText font={'mono'} heading>
185+
{truncateText(name, 40)}
186+
</MqText>
187+
</Box>
165188
<MqText subdued>{description}</MqText>
166189
</Box>
167190
</Box>

web/src/components/jobs/JobDetailPage.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as Redux from 'redux'
88
import { Box, Button, CircularProgress, Divider, Grid, Tab, Tabs } from '@mui/material'
99
import { CalendarIcon } from '@mui/x-date-pickers'
1010
import { DirectionsRun, SportsScore, Start } from '@mui/icons-material'
11+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
1112
import { IState } from '../../store/reducers'
1213
import { LineageJob } from '../../types/lineage'
1314
import { MqInfo } from '../core/info/MqInfo'
@@ -23,9 +24,11 @@ import {
2324
resetRuns,
2425
setTabIndex,
2526
} from '../../store/actionCreators'
27+
import { faCog } from '@fortawesome/free-solid-svg-icons/faCog'
2628
import { formatUpdatedAt } from '../../helpers'
2729
import { jobRunsStatus } from '../../helpers/nodes'
2830
import { stopWatchDuration } from '../../helpers/time'
31+
import { truncateText } from '../../helpers/text'
2932
import { useNavigate, useSearchParams } from 'react-router-dom'
3033
import { useTheme } from '@emotion/react'
3134
import CloseIcon from '@mui/icons-material/Close'
@@ -118,9 +121,29 @@ const JobDetailPage: FunctionComponent<IProps> = (props) => {
118121
>
119122
<Box display={'flex'} alignItems={'center'} justifyContent={'space-between'}>
120123
<Box>
121-
<MqText font={'mono'} heading>
122-
{job.name}
123-
</MqText>
124+
<Box display={'flex'} alignItems={'center'}>
125+
<Box
126+
mr={2}
127+
borderRadius={theme.spacing(1)}
128+
p={1}
129+
width={32}
130+
height={32}
131+
display={'flex'}
132+
bgcolor={theme.palette.primary.main}
133+
>
134+
<FontAwesomeIcon
135+
aria-hidden={'true'}
136+
title={'Job'}
137+
icon={faCog}
138+
width={16}
139+
height={16}
140+
color={theme.palette.common.white}
141+
/>
142+
</Box>
143+
<MqText font={'mono'} heading>
144+
{truncateText(job.name, 40)}
145+
</MqText>
146+
</Box>
124147
{job.description && (
125148
<Box mt={1}>
126149
<MqText subdued>{job.description}</MqText>

web/src/routes/column-level/ColumnLevelDrawer.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as Redux from 'redux'
22
import { Box } from '@mui/system'
33
import {
4+
Chip,
45
CircularProgress,
56
Divider,
67
Table,
@@ -102,10 +103,18 @@ const ColumnLevelDrawer = ({
102103
return (
103104
<React.Fragment key={field.name}>
104105
<TableRow>
105-
<TableCell align='left'>{field.name}</TableCell>
106-
<TableCell align='left'>{field.type}</TableCell>
107106
<TableCell align='left'>
108-
{field.description || 'no description'}
107+
<MqText font={'mono'}>{field.name}</MqText>
108+
</TableCell>
109+
<TableCell align='left'>
110+
<Chip
111+
size={'small'}
112+
label={<MqText font={'mono'}>{field.type}</MqText>}
113+
variant={'outlined'}
114+
/>
115+
</TableCell>
116+
<TableCell align='left'>
117+
<MqText subdued>{field.description || 'no description'}</MqText>
109118
</TableCell>
110119
</TableRow>
111120
</React.Fragment>

web/src/routes/column-level/ZoomControls.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { CenterFocusStrong, CropFree, ZoomIn, ZoomOut } from '@mui/icons-material'
2-
import { Tooltip } from '@mui/material'
32
import { theme } from '../../helpers/theme'
43
import Box from '@mui/material/Box'
54
import IconButton from '@mui/material/IconButton'
5+
import MQTooltip from '../../components/core/tooltip/MQTooltip'
66
import React from 'react'
77

88
interface ZoomControlsProps {
@@ -28,27 +28,27 @@ export const ZoomControls = ({
2828
zIndex={1}
2929
borderColor={theme.palette.grey[500]}
3030
>
31-
<Tooltip title={'Zoom in'} placement={'left'}>
31+
<MQTooltip title={'Zoom in'} placement={'left'}>
3232
<IconButton size='small' onClick={() => handleScaleZoom('in')}>
3333
<ZoomIn />
3434
</IconButton>
35-
</Tooltip>
36-
<Tooltip title={'Zoom out'} placement={'left'}>
35+
</MQTooltip>
36+
<MQTooltip title={'Zoom out'} placement={'left'}>
3737
<IconButton size='small' onClick={() => handleScaleZoom('out')}>
3838
<ZoomOut />
3939
</IconButton>
40-
</Tooltip>
41-
<Tooltip title={'Reset zoom'} placement={'left'}>
40+
</MQTooltip>
41+
<MQTooltip title={'Reset zoom'} placement={'left'}>
4242
<IconButton size={'small'} onClick={handleResetZoom}>
4343
<CropFree />
4444
</IconButton>
45-
</Tooltip>
45+
</MQTooltip>
4646
{handleCenterOnNode && (
47-
<Tooltip title={'Center on selected node'} placement={'left'}>
47+
<MQTooltip title={'Center on selected node'} placement={'left'}>
4848
<IconButton size={'small'} onClick={handleCenterOnNode}>
4949
<CenterFocusStrong />
5050
</IconButton>
51-
</Tooltip>
51+
</MQTooltip>
5252
)}
5353
</Box>
5454
)

web/src/routes/table-level/TableLineageDatasetNode.tsx

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { useNavigate, useParams, useSearchParams } from 'react-router-dom'
1414
import Box from '@mui/system/Box'
1515
import IconButton from '@mui/material/IconButton'
1616
import MQTooltip from '../../components/core/tooltip/MQTooltip'
17+
import MqText from '../../components/core/text/MqText'
1718
import React from 'react'
1819

1920
interface StateProps {
@@ -46,17 +47,36 @@ const TableLineageDatasetNode = ({ node }: TableLineageDatasetNodeProps & StateP
4647

4748
const addToToolTip = (dataset: LineageDataset) => {
4849
return (
49-
<>
50-
<b>{'Namespace: '}</b>
51-
{dataset.namespace}
52-
<br></br>
53-
<b>{'Name: '}</b>
54-
{dataset.name}
55-
<br></br>
56-
<b>{'Description: '}</b>
57-
{dataset.description === null ? 'No Description' : dataset.description}
58-
<br></br>
59-
</>
50+
<foreignObject>
51+
<Box>
52+
<Box display={'flex'} justifyContent={'space-between'}>
53+
<MqText block bold sx={{ mr: 6 }}>
54+
Namespace:
55+
</MqText>
56+
<MqText block font={'mono'}>
57+
{truncateText(dataset.namespace, 25)}
58+
</MqText>
59+
</Box>
60+
<Box display={'flex'} justifyContent={'space-between'}>
61+
<MqText block bold sx={{ mr: 6 }}>
62+
Name:
63+
</MqText>
64+
<MqText block font={'mono'}>
65+
{truncateText(dataset.name, 25)}
66+
</MqText>
67+
</Box>
68+
{dataset.description && (
69+
<Box display={'flex'} justifyContent={'space-between'}>
70+
<MqText block bold sx={{ mr: 6 }}>
71+
Description:
72+
</MqText>
73+
<MqText block font={'mono'}>
74+
{dataset.description}
75+
</MqText>
76+
</Box>
77+
)}
78+
</Box>
79+
</foreignObject>
6080
)
6181
}
6282

@@ -130,7 +150,7 @@ const TableLineageDatasetNode = ({ node }: TableLineageDatasetNodeProps & StateP
130150
</IconButton>
131151
</MQTooltip>
132152
</foreignObject>
133-
<MQTooltip title={addToToolTip(node.data.dataset)}>
153+
<MQTooltip placement={'right-start'} title={addToToolTip(node.data.dataset)}>
134154
<g>
135155
<text
136156
fontSize='8'

0 commit comments

Comments
 (0)