-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Dashboard] EUI Visual Refresh Integration #204442
Changes from 1 commit
6d69138
8b6bd86
c39729e
db7251a
54351f5
aa956f5
404d556
561487c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,6 +29,7 @@ import { | |
EuiPopover, | ||
EuiToolTip, | ||
IconType, | ||
useEuiTheme, | ||
} from '@elastic/eui'; | ||
import { ActionExecutionContext, buildContextMenuForActions } from '@kbn/ui-actions-plugin/public'; | ||
|
||
|
@@ -40,7 +41,6 @@ import { | |
ViewMode, | ||
} from '@kbn/presentation-publishing'; | ||
import { Subscription } from 'rxjs'; | ||
import { euiThemeVars } from '@kbn/ui-theme'; | ||
import { css } from '@emotion/react'; | ||
import { ActionWithContext } from '@kbn/ui-actions-plugin/public/context_menu/build_eui_context_menu_panels'; | ||
import { uiActions } from '../../kibana_services'; | ||
|
@@ -54,9 +54,6 @@ import { getContextMenuAriaLabel } from '../presentation_panel_strings'; | |
import { DefaultPresentationPanelApi, PresentationPanelInternalProps } from '../types'; | ||
import { AnyApiAction } from '../../panel_actions/types'; | ||
|
||
const DASHED_OUTLINE = `1px dashed ${euiThemeVars.euiColorMediumShade}`; | ||
const SOLID_OUTLINE = `1px solid ${euiThemeVars.euiBorderColor}`; | ||
|
||
const QUICK_ACTION_IDS = { | ||
edit: [ | ||
'editPanel', | ||
|
@@ -70,15 +67,6 @@ const QUICK_ACTION_IDS = { | |
|
||
const ALLOWED_NOTIFICATIONS = ['ACTION_FILTERS_NOTIFICATION'] as const; | ||
|
||
const ALL_ROUNDED_CORNERS = ` | ||
border-radius: ${euiThemeVars.euiBorderRadius}; | ||
`; | ||
const TOP_ROUNDED_CORNERS = ` | ||
border-top-left-radius: ${euiThemeVars.euiBorderRadius}; | ||
border-top-right-radius: ${euiThemeVars.euiBorderRadius}; | ||
border-bottom: 0px; | ||
`; | ||
|
||
const createClickHandler = | ||
(action: AnyApiAction, context: ActionExecutionContext<EmbeddableApiContext>) => | ||
(event: React.MouseEvent) => { | ||
|
@@ -131,8 +119,25 @@ export const PresentationPanelHoverActions = ({ | |
const rightHoverActionsRef = useRef<HTMLDivElement | null>(null); | ||
|
||
const [combineHoverActions, setCombineHoverActions] = useState<boolean>(false); | ||
|
||
const { euiTheme } = useEuiTheme(); | ||
|
||
const EDIT_MODE_OUTLINE = `${euiTheme.border.width.thin} dashed ${euiTheme.colors.borderBaseFormsControl}`; | ||
const VIEW_MODE_OUTLINE = euiTheme.border.thin; | ||
|
||
const ALL_ROUNDED_CORNERS = ` | ||
border-radius: ${euiTheme.border.radius.medium}; | ||
`; | ||
const TOP_ROUNDED_CORNERS = ` | ||
border-top-left-radius: ${euiTheme.border.radius.medium}; | ||
border-top-right-radius: ${euiTheme.border.radius.medium}; | ||
border-bottom: 0px; | ||
`; | ||
|
||
const [borderStyles, setBorderStyles] = useState<string>(TOP_ROUNDED_CORNERS); | ||
|
||
console.log({ EDIT_MODE_OUTLINE, VIEW_MODE_OUTLINE, ALL_ROUNDED_CORNERS, TOP_ROUNDED_CORNERS }); | ||
mgadewoll marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
const updateCombineHoverActions = () => { | ||
if (!hoverActionsRef.current || !anchorRef.current) return; | ||
const anchorBox = anchorRef.current.getBoundingClientRect(); | ||
|
@@ -142,11 +147,11 @@ export const PresentationPanelHoverActions = ({ | |
const hoverActionsWidth = | ||
(rightHoverActionsRef.current?.offsetWidth ?? 0) + | ||
(dragHandleRef.current?.offsetWidth ?? 0) + | ||
parseInt(euiThemeVars.euiSize, 10) * 2; | ||
parseInt(euiTheme.size.m, 10) * 2; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should probably be |
||
const hoverActionsHeight = rightHoverActionsRef.current?.offsetHeight ?? 0; | ||
|
||
// Left align hover actions when they would get cut off by the right edge of the window | ||
if (anchorLeft - (hoverActionsWidth - anchorWidth) <= parseInt(euiThemeVars.euiSize, 10)) { | ||
if (anchorLeft - (hoverActionsWidth - anchorWidth) <= parseInt(euiTheme.size.m, 10)) { | ||
dragHandleRef.current?.style.removeProperty('right'); | ||
dragHandleRef.current?.style.setProperty('left', '0'); | ||
} else { | ||
|
@@ -164,9 +169,9 @@ export const PresentationPanelHoverActions = ({ | |
|
||
if (willGetCutOff) { | ||
hoverActionsRef.current.style.setProperty('position', 'absolute'); | ||
hoverActionsRef.current.style.setProperty('top', `-${euiThemeVars.euiSizeS}`); | ||
hoverActionsRef.current.style.setProperty('top', `-${euiTheme.size.s}`); | ||
} else if (shouldCombine) { | ||
hoverActionsRef.current.style.setProperty('top', `-${euiThemeVars.euiSizeL}`); | ||
hoverActionsRef.current.style.setProperty('top', `-${euiTheme.size.l}`); | ||
} else { | ||
hoverActionsRef.current.style.removeProperty('position'); | ||
hoverActionsRef.current.style.removeProperty('top'); | ||
|
@@ -396,7 +401,7 @@ export const PresentationPanelHoverActions = ({ | |
<EuiNotificationBadge | ||
data-test-subj={`embeddablePanelNotification-${notification.id}`} | ||
key={notification.id} | ||
css={{ marginTop: euiThemeVars.euiSizeXS, marginRight: euiThemeVars.euiSizeXS }} | ||
css={{ marginTop: euiTheme.size.xs, marginRight: euiTheme.size.xs }} | ||
onClick={() => | ||
notification.execute({ embeddable: api, trigger: panelNotificationTrigger }) | ||
} | ||
|
@@ -422,7 +427,7 @@ export const PresentationPanelHoverActions = ({ | |
|
||
return notificationComponent; | ||
}); | ||
}, [api, notifications, showNotifications]); | ||
}, [api, euiTheme.size.xs, notifications, showNotifications]); | ||
|
||
const contextMenuClasses = classNames({ | ||
// eslint-disable-next-line @typescript-eslint/naming-convention | ||
|
@@ -463,7 +468,7 @@ export const PresentationPanelHoverActions = ({ | |
})} | ||
data-test-subj="embeddablePanelDragHandle" | ||
css={css` | ||
margin: ${euiThemeVars.euiSizeXS}; | ||
margin: ${euiTheme.size.xs}; | ||
`} | ||
/> | ||
</button> | ||
|
@@ -487,26 +492,26 @@ export const PresentationPanelHoverActions = ({ | |
'' | ||
)}`} | ||
css={css` | ||
border-radius: ${euiThemeVars.euiBorderRadius}; | ||
border-radius: ${euiTheme.border.radius.medium}; | ||
position: relative; | ||
height: 100%; | ||
|
||
.embPanel { | ||
${showBorder | ||
? ` | ||
outline: ${viewMode === 'edit' ? DASHED_OUTLINE : SOLID_OUTLINE}; | ||
outline: ${viewMode === 'edit' ? EDIT_MODE_OUTLINE : VIEW_MODE_OUTLINE}; | ||
` | ||
: ''} | ||
} | ||
|
||
.embPanel__hoverActions { | ||
opacity: 0; | ||
padding: calc(${euiThemeVars.euiSizeXS} - 1px); | ||
padding: calc(${euiTheme.size.xs} - 1px); | ||
display: flex; | ||
flex-wrap: nowrap; | ||
|
||
background-color: ${euiThemeVars.euiColorEmptyShade}; | ||
height: ${euiThemeVars.euiSizeXL}; | ||
background-color: ${euiTheme.colors.backgroundBasePlain}; | ||
height: ${euiTheme.size.xl}; | ||
|
||
pointer-events: all; // Re-enable pointer-events for hover actions | ||
} | ||
|
@@ -515,12 +520,12 @@ export const PresentationPanelHoverActions = ({ | |
&:focus-within, | ||
&.embPanel__hoverActionsAnchor--lockHoverActions { | ||
.embPanel { | ||
outline: ${viewMode === 'edit' ? DASHED_OUTLINE : SOLID_OUTLINE}; | ||
z-index: ${euiThemeVars.euiZLevel2}; | ||
outline: ${viewMode === 'edit' ? EDIT_MODE_OUTLINE : VIEW_MODE_OUTLINE}; | ||
z-index: ${euiTheme.levels.menu}; | ||
} | ||
.embPanel__hoverActionsWrapper { | ||
z-index: ${euiThemeVars.euiZLevel9}; | ||
top: -${euiThemeVars.euiSizeXL}; | ||
z-index: ${euiTheme.levels.modal}; | ||
mgadewoll marked this conversation as resolved.
Show resolved
Hide resolved
|
||
top: -${euiTheme.size.xl}; | ||
|
||
.embPanel__hoverActions { | ||
opacity: 1; | ||
|
@@ -535,12 +540,12 @@ export const PresentationPanelHoverActions = ({ | |
ref={hoverActionsRef} | ||
className="embPanel__hoverActionsWrapper" | ||
css={css` | ||
height: ${euiThemeVars.euiSizeXL}; | ||
height: ${euiTheme.size.XL}; | ||
position: absolute; | ||
top: 0; | ||
display: flex; | ||
justify-content: space-between; | ||
padding: 0 ${euiThemeVars.euiSize}; | ||
padding: 0 ${euiTheme.size.medium}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Blocking |
||
flex-wrap: nowrap; | ||
min-width: 100%; | ||
z-index: -1; | ||
|
@@ -556,7 +561,7 @@ export const PresentationPanelHoverActions = ({ | |
className | ||
)} | ||
css={css` | ||
border: ${viewMode === 'edit' ? DASHED_OUTLINE : SOLID_OUTLINE}; | ||
border: ${viewMode === 'edit' ? EDIT_MODE_OUTLINE : VIEW_MODE_OUTLINE}; | ||
${borderStyles} | ||
`} | ||
> | ||
|
@@ -575,7 +580,7 @@ export const PresentationPanelHoverActions = ({ | |
className | ||
)} | ||
css={css` | ||
border: ${viewMode === 'edit' ? DASHED_OUTLINE : SOLID_OUTLINE}; | ||
border: ${viewMode === 'edit' ? EDIT_MODE_OUTLINE : VIEW_MODE_OUTLINE}; | ||
${borderStyles} | ||
`} | ||
> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you use
useMemo
to avoid recreating these string on each render.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think
useMemo
usage is best left to things which are expensive to compute.useMemo
itself can introduce overhead .