Skip to content
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

Design cleanup details panel #85044

Merged
merged 8 commits into from
Dec 4, 2020
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { EuiPortal, EuiTabs, EuiTab, EuiPanel, EuiTitle } from '@elastic/eui';
import { EuiPortal, EuiTabs, EuiTab, EuiPanel, EuiTitle, EuiSpacer } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import React, { CSSProperties, useMemo, useState } from 'react';
import React, { useMemo, useState } from 'react';
import { EuiFlexGroup, EuiFlexItem, EuiButtonEmpty } from '@elastic/eui';
import { euiStyled } from '../../../../../../../observability/public';
import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../../../lib/lib';
Expand All @@ -15,7 +15,7 @@ import { MetricsTab } from './tabs/metrics/metrics';
import { LogsTab } from './tabs/logs';
import { ProcessesTab } from './tabs/processes';
import { PropertiesTab } from './tabs/properties/index';
import { OVERLAY_Y_START, OVERLAY_BOTTOM_MARGIN, OVERLAY_HEADER_SIZE } from './tabs/shared';
import { OVERLAY_Y_START, OVERLAY_BOTTOM_MARGIN } from './tabs/shared';
import { useLinkProps } from '../../../../../hooks/use_link_props';
import { getNodeDetailUrl } from '../../../../link_to';
import { findInventoryModel } from '../../../../../../common/inventory_models';
Expand Down Expand Up @@ -70,21 +70,23 @@ export const NodeContextPopover = ({

return (
<EuiPortal>
<EuiPanel hasShadow={true} paddingSize={'none'} style={panelStyle}>
<OverlayPanel>
<OverlayHeader>
<OverlayHeaderTitleWrapper>
<EuiFlexGroup responsive={false} gutterSize="m">
<EuiFlexItem grow={true}>
<EuiTitle size="s">
<EuiTitle size="xs">
<h4>{node.name}</h4>
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiFlexGroup gutterSize={'xs'} alignItems={'flexEnd'}>
<EuiFlexGroup gutterSize="m" responsive={false}>
<EuiFlexItem grow={false}>
<EuiButtonEmpty
size="xs"
iconSide={'left'}
iconType={'popout'}
href={nodeDetailMenuItemLinkProps.href}
flush="both"
>
<FormattedMessage
id="xpack.infra.infra.nodeDetails.openAsPage"
Expand All @@ -93,7 +95,7 @@ export const NodeContextPopover = ({
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButtonEmpty onClick={onClose} iconType={'cross'}>
<EuiButtonEmpty size="xs" onClick={onClose} iconType="cross" flush="both">
<FormattedMessage
id="xpack.infra.infra.nodeDetails.close"
defaultMessage="Close"
Expand All @@ -102,8 +104,9 @@ export const NodeContextPopover = ({
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlexItem>
</OverlayHeaderTitleWrapper>
<EuiTabs>
</EuiFlexGroup>
<EuiSpacer size="s" />
<EuiTabs size="s">
{tabs.map((tab, i) => (
<EuiTab key={tab.id} isSelected={i === selectedTab} onClick={() => setSelectedTab(i)}>
{tab.name}
Expand All @@ -112,32 +115,38 @@ export const NodeContextPopover = ({
</EuiTabs>
</OverlayHeader>
{tabs[selectedTab].content}
</EuiPanel>
</OverlayPanel>
</EuiPortal>
);
};

const OverlayHeader = euiStyled.div`
border-color: ${(props) => props.theme.eui.euiBorderColor};
border-bottom-width: ${(props) => props.theme.eui.euiBorderWidthThick};
padding-bottom: 0;
overflow: hidden;
background-color: ${(props) => props.theme.eui.euiColorLightestShade};
height: ${OVERLAY_HEADER_SIZE}px;
padding-top: ${(props) => props.theme.eui.paddingSizes.m};
padding-right: ${(props) => props.theme.eui.paddingSizes.m};
padding-left: ${(props) => props.theme.eui.paddingSizes.m};
background-color: ${(props) => props.theme.eui.euiPageBackgroundColor};
box-shadow: inset 0 -1px ${(props) => props.theme.eui.euiBorderColor};
`;

const OverlayHeaderTitleWrapper = euiStyled(EuiFlexGroup).attrs({ alignItems: 'center' })`
padding: ${(props) => props.theme.eui.paddingSizes.s} ${(props) =>
props.theme.eui.paddingSizes.m} 0;
`;
const OverlayPanel = euiStyled(EuiPanel).attrs({ paddingSize: 'none' })`
display: flex;
flex-direction: column;
position: absolute;
right: 16px;
top: ${OVERLAY_Y_START}px;
width: 100%;
max-width: 720px;
z-index: 2;
max-height: calc(100vh - ${OVERLAY_Y_START + OVERLAY_BOTTOM_MARGIN}px);
overflow: hidden;

const panelStyle: CSSProperties = {
position: 'absolute',
right: 10,
top: OVERLAY_Y_START,
width: '50%',
maxWidth: 730,
zIndex: 2,
height: `calc(100vh - ${OVERLAY_Y_START + OVERLAY_BOTTOM_MARGIN}px)`,
overflow: 'hidden',
};
@media (max-width: 752px) {
border-radius: 0px !important;
left: 0px;
right: 0px;
top: 97px;
bottom: 0;
max-height: calc(100vh - 97px);
max-width: 100%;
}
`;
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import { TabContent, TabProps } from './shared';
import { LogStream } from '../../../../../../components/log_stream';
import { useWaffleOptionsContext } from '../../../hooks/use_waffle_options';
import { findInventoryFields } from '../../../../../../../common/inventory_models';
import { euiStyled } from '../../../../../../../../observability/public';
import { useLinkProps } from '../../../../../../hooks/use_link_props';
import { getNodeLogsUrl } from '../../../../../link_to';

Expand Down Expand Up @@ -51,22 +50,25 @@ const TabComponent = (props: TabProps) => {

return (
<TabContent>
<EuiFlexGroup gutterSize={'none'} alignItems="center">
<EuiFlexGroup gutterSize={'m'} alignItems={'center'} responsive={false}>
<EuiFlexItem>
<QueryWrapper>
<EuiFieldSearch
fullWidth
placeholder={i18n.translate('xpack.infra.nodeDetails.logs.textFieldPlaceholder', {
defaultMessage: 'Search for log entries...',
})}
value={textQuery}
isClearable
onChange={onQueryChange}
/>
</QueryWrapper>
<EuiFieldSearch
fullWidth
placeholder={i18n.translate('xpack.infra.nodeDetails.logs.textFieldPlaceholder', {
defaultMessage: 'Search for log entries...',
})}
value={textQuery}
isClearable
onChange={onQueryChange}
/>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButtonEmpty iconType={'popout'} {...nodeLogsMenuItemLinkProps}>
<EuiButtonEmpty
size={'xs'}
flush={'both'}
iconType={'popout'}
{...nodeLogsMenuItemLinkProps}
>
<FormattedMessage
id="xpack.infra.nodeDetails.logs.openLogsLink"
defaultMessage="Open in Logs"
Expand All @@ -79,11 +81,6 @@ const TabComponent = (props: TabProps) => {
);
};

const QueryWrapper = euiStyled.div`
padding: ${(props) => props.theme.eui.paddingSizes.m};
padding-right: 0;
`;

export const LogsTab = {
id: 'logs',
name: i18n.translate('xpack.infra.nodeDetails.tabs.logs', {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { EuiFlexGroup } from '@elastic/eui';
import { EuiIcon } from '@elastic/eui';
import { colorTransformer } from '../../../../../../../../common/color_palette';
import { MetricsExplorerOptionsMetric } from '../../../../../metrics_explorer/hooks/use_metrics_explorer_options';
import { euiStyled } from '../../../../../../../../../observability/public';

interface Props {
title: string;
Expand All @@ -20,33 +19,33 @@ interface Props {

export const ChartHeader = ({ title, metrics }: Props) => {
return (
<ChartHeaderWrapper>
<EuiFlexGroup gutterSize={'s'} responsive={false}>
<EuiFlexItem grow={1}>
<EuiText>
<strong>{title}</strong>
<EuiText size={'s'}>
<h4>{title}</h4>
</EuiText>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiFlexGroup gutterSize={'s'} alignItems={'center'}>
<EuiFlexGroup gutterSize={'s'} alignItems={'center'} responsive={false}>
{metrics.map((chartMetric) => (
<EuiFlexGroup key={chartMetric.label!} gutterSize={'s'} alignItems={'center'}>
<EuiFlexItem grow={false}>
<EuiIcon color={colorTransformer(chartMetric.color!)} type={'dot'} />
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiText size={'xs'}>{chartMetric.label}</EuiText>
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexItem key={chartMetric.label!}>
<EuiFlexGroup
key={chartMetric.label!}
gutterSize={'xs'}
alignItems={'center'}
responsive={false}
>
<EuiFlexItem grow={false}>
<EuiIcon color={colorTransformer(chartMetric.color!)} type={'dot'} />
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiText size={'xs'}>{chartMetric.label}</EuiText>
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlexItem>
))}
</EuiFlexGroup>
</EuiFlexItem>
</ChartHeaderWrapper>
</EuiFlexGroup>
);
};

const ChartHeaderWrapper = euiStyled.div`
display: flex;
width: 100%;
padding: ${(props) => props.theme.eui.paddingSizes.s} ${(props) =>
props.theme.eui.paddingSizes.m};
`;
Loading