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

Migrate ListView from patternfly-react #3480

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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 0 additions & 4 deletions frontend/public/components/_list-view.scss

This file was deleted.

21 changes: 0 additions & 21 deletions frontend/public/components/overview/_project-overview.scss
Expand Up @@ -49,16 +49,6 @@

.project-overview__item {
min-height: 71px;

&.list-group-item {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice to be able to remove the overrides 👍

background-clip: initial;
border-bottom: 1px solid $color-pf-black-200;
border-left: 0;
border-right: 0;
border-top: 1px solid $color-pf-black-200;
cursor: pointer;
position: relative;
}
}

.project-overview__item--selected {
Expand Down Expand Up @@ -128,17 +118,6 @@
}

@media (min-width: $screen-md-min) {
// Override Patternfly list view styles so that the additional info has a
// little more space for alerts, metrics, and pod status.
.list-view-pf-additional-info {
width: 62%;
}

.list-view-pf-description {
flex-basis: 38%;
width: 38%;
}

.project-overview__detail--cpu,
.project-overview__detail--memory {
text-align: right;
Expand Down
91 changes: 91 additions & 0 deletions frontend/public/components/overview/list-view/_list-view.scss
@@ -0,0 +1,91 @@
.list-view-pf {
.list-group-item {
align-items: flex-start;
border: 1px solid $color-pf-black-200;
border-left: 0;
border-right: 0;
@include clearfix(); //IE9 fallback
cursor: pointer;
display: flex;
flex-wrap: wrap;
padding-bottom: 0;
padding-top: 0;
position: relative;
&:hover {
background-color: $list-view-hover-bg;
}
@media (min-width: $screen-md-min) {
align-items: center;
}
}
.list-group-item-heading {
font-size: $font-size-h3;
small {
display: block;
font-size: ($font-size-base * .8);
font-weight: 400;
}
@media (min-width: $screen-md-min) {
flex: 1 0 unquote("calc(25% - 20px)");
float: left; // IE9 fallback
font-size: $font-size-base;
margin: 0 ($grid-gutter-width/2) 0 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: unquote("calc(25% - 20px)"); // IE9 fallback
}
}
}
.list-view-pf-additional-info {
align-items: center;
display: flex;
flex-wrap: wrap;
@media (min-width: $screen-md-min) {
flex: 1 0 auto; // it covers whats left from summary
float: left; // IE9 fallback
width: 62%; // IE9 fallback
}
}
.list-view-pf-body {
align-items: center;
display: table-cell; //IE9 fallback
flex: 1;
min-width: 0;
vertical-align: top; //IE9 fallback
width: 100%; // IE9 fallback, it extends the cell to size of the container
@media (min-width: $screen-md-min) {
align-items: center;
display: flex;
flex-direction: row;
}
}
.list-view-pf-description {
flex: 1 0 50%;
overflow: hidden;
text-overflow: ellipsis;
@media (min-width: $screen-md-min) {
align-items: center;
display: flex;
flex-basis: 38%;
float: left; //IE9 fallback
width: 38%; //IE9 fallback
}
}
.list-view-pf-main-info {
align-items: flex-start;
display: flex;
flex: 1;
min-width: 0;
padding-bottom: ($grid-gutter-width/2);
padding-top: ($grid-gutter-width/2);
@media (min-width: $screen-md-min) {
align-items: center;
.list-view-pf-top-align & {
align-items: flex-start;
}
}
}
.list-view-pf-view {
margin-top: 30px;
}
9 changes: 9 additions & 0 deletions frontend/public/components/overview/list-view/index.tsx
@@ -0,0 +1,9 @@
export * from './list-view';
export * from './list-view-additional-info';
export * from './list-view-body';
export * from './list-view-description';
export * from './list-view-description-heading';
export * from './list-view-group-item';
export * from './list-view-item';
export * from './list-view-main-info';
export * from './list-view-row';
@@ -0,0 +1,9 @@
import * as React from 'react';

export const ListViewAdditionalInfo: React.FC<ListViewAdditionalInfoProps> = ({ children }) => (
<div className="list-view-pf-additional-info">{children}</div>
);

type ListViewAdditionalInfoProps = {
children: React.ReactNode;
};
@@ -0,0 +1,9 @@
import * as React from 'react';

export const ListViewBody: React.FC<ListViewBodyProps> = ({ children }) => (
<div className="list-view-pf-body">{children}</div>
);

type ListViewBodyProps = {
children: React.ReactNode;
};
@@ -0,0 +1,9 @@
import * as React from 'react';

export const ListViewDescriptionHeading: React.FC<ListViewDescriptionHeadingProps> = ({
children,
}) => <div className="list-group-item-heading">{children}</div>;

type ListViewDescriptionHeadingProps = {
children: React.ReactNode;
};
@@ -0,0 +1,9 @@
import * as React from 'react';

export const ListViewDescription: React.FC<ListViewDescriptionProps> = ({ children }) => (
<div className="list-view-pf-description">{children}</div>
);

type ListViewDescriptionProps = {
children: React.ReactNode;
};
@@ -0,0 +1,20 @@
import * as React from 'react';
import * as classNames from 'classnames';

export const ListViewGroupItem: React.FC<ListViewGroupItemProps> = ({
children,
className,
...props
}) => {
const classes = classNames('list-group-item', className);
return (
<div className={classes} {...props}>
{children}
</div>
);
};

type ListViewGroupItemProps = {
children: React.ReactNode;
className?: string;
};
22 changes: 22 additions & 0 deletions frontend/public/components/overview/list-view/list-view-item.tsx
@@ -0,0 +1,22 @@
import * as React from 'react';

import { ListViewGroupItem } from './list-view-group-item';
import { ListViewRow } from './list-view-row';

export const ListViewItem: React.FC<ListViewItemProps> = ({
additionalInfo,
heading,
...props
}) => (
<ListViewGroupItem {...props}>
<ListViewRow heading={heading} additionalInfo={additionalInfo} />
</ListViewGroupItem>
);

type ListViewItemProps = {
additionalInfo?: React.ReactNode[];
className?: string;
heading?: React.ReactNode;
id: string;
onClick: React.MouseEventHandler;
};
@@ -0,0 +1,9 @@
import * as React from 'react';

export const ListViewMainInfo: React.FC<ListViewMainInfoProps> = ({ children }) => (
<div className="list-view-pf-main-info">{children}</div>
);

type ListViewMainInfoProps = {
children: React.ReactNode;
};
25 changes: 25 additions & 0 deletions frontend/public/components/overview/list-view/list-view-row.tsx
@@ -0,0 +1,25 @@
import * as React from 'react';

import { ListViewAdditionalInfo } from './list-view-additional-info';
import { ListViewBody } from './list-view-body';
import { ListViewDescription } from './list-view-description';
import { ListViewDescriptionHeading } from './list-view-description-heading';
import { ListViewMainInfo } from './list-view-main-info';

export const ListViewRow: React.FC<ListViewRowProps> = ({ additionalInfo, heading }) => (
<ListViewMainInfo key="main_info">
<ListViewBody>
{heading && (
<ListViewDescription>
{heading && <ListViewDescriptionHeading>{heading}</ListViewDescriptionHeading>}
</ListViewDescription>
)}
{additionalInfo && <ListViewAdditionalInfo>{additionalInfo}</ListViewAdditionalInfo>}
</ListViewBody>
</ListViewMainInfo>
);

type ListViewRowProps = {
additionalInfo?: React.ReactNode[];
heading?: React.ReactNode;
};
16 changes: 16 additions & 0 deletions frontend/public/components/overview/list-view/list-view.tsx
@@ -0,0 +1,16 @@
import * as React from 'react';
import * as classNames from 'classnames';

export const ListView: React.FC<ListViewProps> = ({ children, className, ...props }) => {
const classes = classNames('list-group list-view-pf list-view-pf-view', className);
return (
<div className={classes} {...props}>
{children}
</div>
);
};

type ListViewProps = {
children: React.ReactNode;
className?: string;
};
4 changes: 2 additions & 2 deletions frontend/public/components/overview/project-overview.tsx
Expand Up @@ -3,9 +3,9 @@ import * as classnames from 'classnames';
import * as React from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import { ListView } from 'patternfly-react';
import { Button, Tooltip } from '@patternfly/react-core';

import { ListView, ListViewItem } from './list-view';
import {
Status as TooltipStatus,
YellowExclamationTriangleIcon,
Expand Down Expand Up @@ -324,7 +324,7 @@ const ProjectOverviewListItem = connect<
);

return (
<ListView.Item
<ListViewItem
onClick={onClick}
className={className}
heading={heading}
Expand Down
2 changes: 1 addition & 1 deletion frontend/public/style.scss
Expand Up @@ -85,8 +85,8 @@
@import "components/cluster-service-instance";
@import "components/overview/build-overview";
@import "components/overview/overview";
@import "components/overview/list-view/list-view";
@import "components/overview/project-overview";
@import "components/list-view";
@import "components/deploy-image";
@import "components/instantiate-template";
@import "components/routes/create-route";
Expand Down
1 change: 0 additions & 1 deletion frontend/public/vendor.scss
Expand Up @@ -32,7 +32,6 @@
@import '~patternfly/dist/sass/patternfly/dropdowns'; // required by @patternfly/react-console
@import '~patternfly/dist/sass/patternfly/modals';
@import '~patternfly/dist/sass/patternfly/toolbar';
@import '~patternfly/dist/sass/patternfly/list-view';
@import '~patternfly/dist/sass/patternfly/forms';
@import "~xterm/dist/addons/fullscreen/fullscreen";
@import '~patternfly-react-extensions/dist/sass/variables';
Expand Down