Skip to content

Commit

Permalink
[Observability AI Assistant] Mobile fixes (#177154)
Browse files Browse the repository at this point in the history
Resolves #177133

## Summary

This fixes visual and interactive defects on mobile viewports.

<img width="1624" alt="Screenshot 2024-02-19 at 14 00 30"
src="https://github.com/elastic/kibana/assets/535564/edebe648-6848-42a4-a276-fc286d3b5a46">

## Checklist:
- [X] Header Link breaks weirdly on mobile
- [x] Make sure header bar menu closes properly upon opening Assistant
- [x] Fix title bar visually
- [x] Make sure prompt editor behaves
- [x] Hide conversation sidebar + new chat button
- [x] Make conversations scroll properly
- [x] More? Test thoroughly

(cherry picked from commit 9dd003d)
  • Loading branch information
CoenWarmer committed Feb 19, 2024
1 parent 1dc7a70 commit 341f29a
Show file tree
Hide file tree
Showing 19 changed files with 287 additions and 134 deletions.
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

0 comments on commit 341f29a

Please sign in to comment.