Skip to content

improve: UX Enhancements in workspace summary #473

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

Merged
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
@@ -1,10 +1,10 @@
import React, { useCallback, useRef, useState } from 'react';
import { Button } from '@patternfly/react-core/dist/esm/components/Button';
import { Content, ContentVariants } from '@patternfly/react-core/dist/esm/components/Content';
import { PageSection } from '@patternfly/react-core/dist/esm/components/Page';
import { Stack, StackItem } from '@patternfly/react-core/dist/esm/layouts/Stack';
import { ArrowLeftIcon } from '@patternfly/react-icons/dist/esm/icons/arrow-left-icon';
import { useTypedLocation, useTypedNavigate, useTypedParams } from '~/app/routerHelper';
import { Breadcrumb } from '@patternfly/react-core/dist/esm/components/Breadcrumb';
import { BreadcrumbItem } from '@patternfly/react-core/dist/esm/components/Breadcrumb/BreadcrumbItem';
import { useTypedLocation, useTypedParams } from '~/app/routerHelper';
import WorkspaceTable, {
WorkspaceTableFilteredColumn,
WorkspaceTableRef,
Expand All @@ -18,7 +18,6 @@ import { useWorkspaceRowActions } from '~/app/hooks/useWorkspaceRowActions';
import { usePolling } from '~/app/hooks/usePolling';

const WorkspaceKindSummary: React.FC = () => {
const navigate = useTypedNavigate();
const [isSummaryExpanded, setIsSummaryExpanded] = useState(true);

const { state } = useTypedLocation<'workspaceKindSummary'>();
Expand Down Expand Up @@ -56,18 +55,15 @@ const WorkspaceKindSummary: React.FC = () => {
}

return (
<PageSection isFilled>
<PageSection>
<Stack hasGutter>
<StackItem>
<Button
variant="link"
icon={<ArrowLeftIcon />}
iconPosition="left"
onClick={() => navigate('workspaceKinds')}
aria-label="Back to Workspace Kinds"
>
Back
</Button>
<Breadcrumb>
<BreadcrumbItem to="workspaceKinds">Workspace Kinds</BreadcrumbItem>
<BreadcrumbItem to="#" isActive>
Workspaces in {kind}
</BreadcrumbItem>
</Breadcrumb>
</StackItem>
<StackItem>
<Content component={ContentVariants.h1}>{kind}</Content>
Expand All @@ -83,7 +79,7 @@ const WorkspaceKindSummary: React.FC = () => {
onAddFilter={onAddFilter}
/>
</StackItem>
<StackItem isFilled>
<StackItem>
<WorkspaceTable
ref={workspaceTableRef}
workspaces={workspaces}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import React, { useMemo } from 'react';
import { Bullseye } from '@patternfly/react-core/dist/esm/layouts/Bullseye';
import { Button } from '@patternfly/react-core/dist/esm/components/Button';
import {
Card,
Expand All @@ -12,11 +11,7 @@ import { Content, ContentVariants } from '@patternfly/react-core/dist/esm/compon
import { Divider } from '@patternfly/react-core/dist/esm/components/Divider';
import { Flex, FlexItem } from '@patternfly/react-core/dist/esm/layouts/Flex';
import { Stack, StackItem } from '@patternfly/react-core/dist/esm/layouts/Stack';
import {
t_global_spacer_md as MediumPadding,
t_global_font_size_4xl as LargeFontSize,
t_global_font_weight_heading_bold as BoldFontWeight,
} from '@patternfly/react-tokens';
import { t_global_spacer_md as MediumPadding } from '@patternfly/react-tokens';
import { Workspace } from '~/shared/api/backendApiTypes';
import {
countGpusFromWorkspaces,
Expand Down Expand Up @@ -51,7 +46,7 @@ const WorkspaceKindSummaryExpandableCard: React.FC<WorkspaceKindSummaryExpandabl
);

return (
<Card isExpanded={isExpanded}>
<Card isExpanded={isExpanded} variant="secondary">
<CardHeader onExpand={onExpandToggle}>
<CardTitle>
<Content component={ContentVariants.h2}>Workspaces summary</Content>
Expand All @@ -62,7 +57,7 @@ const WorkspaceKindSummaryExpandableCard: React.FC<WorkspaceKindSummaryExpandabl
<Flex wrap="wrap">
<SectionFlex title="Total GPUs in use">
<FlexItem>
<Content>
<Content className="pf-v6-u-font-size-4xl pf-v6-u-font-weight-bold">
{countGpusFromWorkspaces(filterRunningWorkspaces(workspaces))} GPUs
</Content>
</FlexItem>
Expand All @@ -73,29 +68,25 @@ const WorkspaceKindSummaryExpandableCard: React.FC<WorkspaceKindSummaryExpandabl
<SectionDivider />
<SectionFlex title="Idle GPU workspaces">
<FlexItem>
<Bullseye>
<Button
variant="link"
isInline
style={{ fontSize: LargeFontSize.value, fontWeight: BoldFontWeight.value }}
onClick={() => {
onAddFilter({ columnKey: 'idleGpu', value: YesNoValue.Yes });
}}
>
{filterIdleWorkspacesWithGpu(workspaces).length}
</Button>
</Bullseye>
<Button
variant="link"
isInline
className="pf-v6-u-font-size-4xl pf-v6-u-font-weight-bold"
onClick={() => {
onAddFilter({ columnKey: 'idleGpu', value: YesNoValue.Yes });
}}
>
{filterIdleWorkspacesWithGpu(workspaces).length}
</Button>
</FlexItem>
<FlexItem>
<Bullseye>
<Content>Idle GPU workspaces</Content>
</Bullseye>
<Content>Idle GPU Workspaces</Content>
</FlexItem>
</SectionFlex>
<SectionDivider />
<SectionFlex title="Top GPU consumer namespaces">
<FlexItem>
<Stack hasGutter>
<SectionFlex title="Top GPU Consumer Namespaces">
<Content>
<Stack className="pf-v6-u-pt-sm">
{topGpuConsumersByNamespace.length > 0 ? (
topGpuConsumersByNamespace.map(([ns, record]) => (
<StackItem key={ns}>
Expand All @@ -112,7 +103,7 @@ const WorkspaceKindSummaryExpandableCard: React.FC<WorkspaceKindSummaryExpandabl
</StackItem>
)}
</Stack>
</FlexItem>
</Content>
</SectionFlex>
</Flex>
</CardBody>
Expand All @@ -134,7 +125,6 @@ const SectionFlex: React.FC<SectionFlexProps> = ({ children, title }) => (
<Flex
direction={{ default: 'column' }}
justifyContent={{ default: 'justifyContentSpaceBetween' }}
style={{ height: '100%' }}
>
<FlexItem>
<Content component={ContentVariants.h3}>{title}</Content>
Expand Down