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

[8.13] [Observability AI Assistant] Mobile fixes (#177154) #177238

Merged
merged 1 commit into from
Feb 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,7 @@ import { InspectorHeaderLink } from './inspector_header_link';
import { Labs } from './labs';

export function ApmHeaderActionMenu() {
const {
core,
plugins,
config,
observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useApmPluginContext();
const { core, plugins, config } = useApmPluginContext();
const { search } = window.location;
const { application, http } = core;
const { basePath } = http;
Expand Down Expand Up @@ -101,9 +96,6 @@ export function ApmHeaderActionMenu() {
})}
</EuiHeaderLink>
<InspectorHeaderLink />
{ObservabilityAIAssistantActionMenuItem ? (
<ObservabilityAIAssistantActionMenuItem />
) : null}
</EuiHeaderLinks>
);
}
18 changes: 15 additions & 3 deletions x-pack/plugins/apm/public/components/routing/app_root/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { RouteRenderer, RouterProvider } from '@kbn/typed-react-router-config';
import { euiDarkVars, euiLightVars } from '@kbn/ui-theme';
import React from 'react';
import { DefaultTheme, ThemeProvider } from 'styled-components';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { useKibanaEnvironmentContextProvider } from '../../../context/kibana_environment_context/use_kibana_environment_context';
import { AnomalyDetectionJobsContextProvider } from '../../../context/anomaly_detection_jobs/anomaly_detection_jobs_context';
import {
Expand Down Expand Up @@ -128,12 +129,23 @@ export function ApmAppRoot({
}

function MountApmHeaderActionMenu() {
const { setHeaderActionMenu, theme$ } =
useApmPluginContext().appMountParameters;
const {
appMountParameters: { setHeaderActionMenu, theme$ },
observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useApmPluginContext();

return (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme$}>
<ApmHeaderActionMenu />
<EuiFlexGroup responsive={false} gutterSize="s">
<EuiFlexItem>
<ApmHeaderActionMenu />
</EuiFlexItem>
{ObservabilityAIAssistantActionMenuItem ? (
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
</EuiFlexGroup>
</HeaderMenuPortal>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import React from 'react';
import { TypedLensByValueInput } from '@kbn/lens-plugin/public';
import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public';
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { ExpViewActionMenuContent } from './action_menu';
import { useExploratoryView } from '../../contexts/exploratory_view_config';
import { useKibana } from '../../hooks/use_kibana';

interface Props {
timeRange?: { from: string; to: string };
Expand All @@ -18,9 +20,22 @@ interface Props {
export function ExpViewActionMenu(props: Props) {
const { setHeaderActionMenu, theme$ } = useExploratoryView();

const {
observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem },
} = useKibana().services;

return (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme$}>
<ExpViewActionMenuContent {...props} />
<EuiFlexGroup responsive={false} gutterSize="s">
<EuiFlexItem>
<ExpViewActionMenuContent {...props} />
</EuiFlexItem>
{ObservabilityAIAssistantActionMenuItem ? (
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
</EuiFlexGroup>
</HeaderMenuPortal>
);
}
36 changes: 21 additions & 15 deletions x-pack/plugins/infra/public/pages/logs/page_content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import { EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui';
import { EuiFlexGroup, EuiFlexItem, EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import React, { useContext } from 'react';
import { Routes, Route } from '@kbn/shared-ux-router';
Expand Down Expand Up @@ -74,22 +74,28 @@ export const LogsPageContent: React.FunctionComponent = () => {

{setHeaderActionMenu && theme$ && (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme$}>
<EuiHeaderLinks gutterSize="xs">
<EuiHeaderLink color={'text'} {...settingsLinkProps}>
{settingsTabTitle}
</EuiHeaderLink>
<LazyAlertDropdownWrapper />
<EuiHeaderLink
href={getUrlForApp('/integrations/browse')}
color="primary"
iconType="indexOpen"
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
<EuiFlexGroup responsive={false} gutterSize="s">
<EuiFlexItem>
<EuiHeaderLinks gutterSize="xs">
<EuiHeaderLink color={'text'} {...settingsLinkProps}>
{settingsTabTitle}
</EuiHeaderLink>
<LazyAlertDropdownWrapper />
<EuiHeaderLink
href={getUrlForApp('/integrations/browse')}
color="primary"
iconType="indexOpen"
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
</EuiHeaderLinks>
</EuiFlexItem>
{ObservabilityAIAssistantActionMenuItem ? (
<ObservabilityAIAssistantActionMenuItem />
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
</EuiHeaderLinks>
</EuiFlexGroup>
</HeaderMenuPortal>
)}

Expand Down
50 changes: 32 additions & 18 deletions x-pack/plugins/infra/public/pages/metrics/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ import { i18n } from '@kbn/i18n';
import React, { useContext } from 'react';
import { Routes, Route } from '@kbn/shared-ux-router';

import { EuiErrorBoundary, EuiHeaderLinks, EuiHeaderLink } from '@elastic/eui';
import {
EuiErrorBoundary,
EuiHeaderLinks,
EuiHeaderLink,
EuiFlexGroup,
EuiFlexItem,
} from '@elastic/eui';
import { useKibana, useUiSetting } from '@kbn/kibana-react-plugin/public';
import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public';
import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common';
Expand Down Expand Up @@ -83,25 +89,33 @@ export const InfrastructurePage = () => {
/>
{setHeaderActionMenu && theme$ && (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme$}>
<EuiHeaderLinks gutterSize="xs">
<EuiHeaderLink color={'text'} {...settingsLinkProps}>
{settingsTabTitle}
</EuiHeaderLink>
<Route path={'/inventory'} component={AnomalyDetectionFlyout} />
{config.featureFlags.alertsAndRulesDropdownEnabled && (
<MetricsAlertDropdown />
)}
<EuiHeaderLink
href={kibana.services?.application?.getUrlForApp('/integrations/browse')}
color="primary"
iconType="indexOpen"
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
<EuiFlexGroup responsive={false} gutterSize="s">
<EuiFlexItem>
<EuiHeaderLinks gutterSize="xs">
<EuiHeaderLink color={'text'} {...settingsLinkProps}>
{settingsTabTitle}
</EuiHeaderLink>
<Route path={'/inventory'} component={AnomalyDetectionFlyout} />
{config.featureFlags.alertsAndRulesDropdownEnabled && (
<MetricsAlertDropdown />
)}
<EuiHeaderLink
href={kibana.services?.application?.getUrlForApp(
'/integrations/browse'
)}
color="primary"
iconType="indexOpen"
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
</EuiHeaderLinks>
</EuiFlexItem>
{ObservabilityAIAssistantActionMenuItem ? (
<ObservabilityAIAssistantActionMenuItem />
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
</EuiHeaderLinks>
</EuiFlexGroup>
</HeaderMenuPortal>
)}
<Routes>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import { EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui';
import { EuiFlexGroup, EuiFlexItem, EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { usePluginContext } from '../../../../hooks/use_plugin_context';
Expand All @@ -25,20 +25,26 @@ export function HeaderMenu(): React.ReactElement | null {

return (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme.theme$}>
<EuiHeaderLinks>
<EuiHeaderLink
color="primary"
href={http.basePath.prepend('/app/integrations/browse')}
iconType="indexOpen"
>
{addDataLinkText}
</EuiHeaderLink>
{ObservabilityAIAssistantActionMenuItem ? <ObservabilityAIAssistantActionMenuItem /> : null}
</EuiHeaderLinks>
<EuiFlexGroup responsive={false} gutterSize="s">
{ObservabilityAIAssistantActionMenuItem ? (
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
<EuiFlexItem>
<EuiHeaderLinks>
<EuiHeaderLink
color="primary"
href={http.basePath.prepend('/app/integrations/browse')}
iconType="indexOpen"
>
{i18n.translate('xpack.observability.home.addData', {
defaultMessage: 'Add integrations',
})}
</EuiHeaderLink>
</EuiHeaderLinks>
</EuiFlexItem>
</EuiFlexGroup>
</HeaderMenuPortal>
);
}

const addDataLinkText = i18n.translate('xpack.observability.home.addData', {
defaultMessage: 'Add integrations',
});
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,15 @@
*/
import React, { useEffect, useMemo, useState } from 'react';
import datemath from '@elastic/datemath';
import { EuiFlexGroup, EuiFlexItem, EuiHeaderLink, EuiLoadingSpinner } from '@elastic/eui';
import {
EuiFlexGroup,
EuiFlexItem,
EuiHeaderLink,
EuiLoadingSpinner,
useCurrentEuiBreakpoint,
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { css } from '@emotion/css';
import moment from 'moment';
import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider';
import { useAbortableAsync } from '../../hooks/use_abortable_async';
Expand All @@ -16,8 +23,14 @@ import { AssistantAvatar } from '../assistant_avatar';
import { ChatFlyout } from '../chat/chat_flyout';
import { useKibana } from '../../hooks/use_kibana';

const buttonLabelClassName = css`
display: none;
`;

export function ObservabilityAIAssistantActionMenuItem() {
const service = useObservabilityAIAssistant();
const breakpoint = useCurrentEuiBreakpoint();

const { plugins } = useKibana().services;

const [isOpen, setIsOpen] = useState(false);
Expand Down Expand Up @@ -71,15 +84,15 @@ export function ObservabilityAIAssistantActionMenuItem() {
setIsOpen(() => true);
}}
>
<EuiFlexGroup gutterSize="s" alignItems="center">
<EuiFlexGroup gutterSize="s" alignItems="center" responsive={false}>
<EuiFlexItem grow={false}>
{!isOpen || chatService.value ? (
<AssistantAvatar size="xs" />
) : (
<EuiLoadingSpinner size="m" />
)}
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiFlexItem grow={false} className={breakpoint === 'xs' ? buttonLabelClassName : ''}>
{i18n.translate('xpack.observabilityAiAssistant.actionMenuItemLabel', {
defaultMessage: 'AI Assistant',
})}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,18 @@ export function ChatBody({
}

const containerClassName = css`
background: white;
min-width: 0;
max-height: 100%;
max-width: ${startedFrom === 'conversationView'
? 1200 - 250 + 'px' // page template max width - conversation list width.
: '100%'};
`;

const headerContainerClassName = css`
padding-right: ${showLinkToConversationsApp ? '32px' : '0'};
`;

const [stickToBottom, setStickToBottom] = useState(true);

const isAtBottom = (parent: HTMLElement) =>
Expand Down Expand Up @@ -401,9 +406,10 @@ export function ChatBody({
return (
<EuiFlexGroup
direction="column"
gutterSize="none"
className={containerClassName}
gutterSize="none"
justifyContent="center"
responsive={false}
>
<EuiFlexItem grow={false} className={chatBodyContainerClassNameWithError}>
<EuiCallOut
Expand All @@ -425,7 +431,12 @@ export function ChatBody({
}

return (
<EuiFlexGroup direction="column" gutterSize="none" className={containerClassName}>
<EuiFlexGroup
direction="column"
gutterSize="none"
className={containerClassName}
responsive={false}
>
<EuiFlexItem
grow={false}
className={conversation.error ? chatBodyContainerClassNameWithError : undefined}
Expand All @@ -446,7 +457,7 @@ export function ChatBody({
</EuiCallOut>
) : null}
</EuiFlexItem>
<EuiFlexItem grow={false} css={{ paddingRight: showLinkToConversationsApp ? '24px' : '0' }}>
<EuiFlexItem grow={false} className={headerContainerClassName}>
<ChatHeader
connectors={connectors}
conversationId={
Expand Down
Loading
Loading