Removing 'Show All' in Query and Packs (#1275)

This commit is contained in:
Kyle Knight
2017-02-23 14:18:23 -05:00
committed by Jason Meller
parent 6c7862c42e
commit 0716d19c52
7 changed files with 3 additions and 145 deletions
@@ -1,64 +1,25 @@
import React, { Component, PropTypes } from 'react';
import { take } from 'lodash';
import { Link } from 'react-router';
import Button from 'components/buttons/Button';
import Icon from 'components/icons/Icon';
import scheduledQueryInterface from 'interfaces/scheduled_query';
const baseClass = 'pack-details-side-panel';
const DEFAULT_NUM_QUERIES = 6;
class ScheduledQueriesSection extends Component {
static propTypes = {
scheduledQueries: PropTypes.arrayOf(scheduledQueryInterface),
};
constructor (props) {
super(props);
this.state = { showAllQueries: false };
}
onShowAll = () => {
this.setState({ showAllQueries: true });
return false;
}
renderShowMoreQueries = () => {
const { showAllQueries } = this.state;
const scheduledQueryCount = this.props.scheduledQueries.length;
const shouldRenderShowMore = !showAllQueries && scheduledQueryCount > DEFAULT_NUM_QUERIES;
if (shouldRenderShowMore) {
const { onShowAll } = this;
const numMoreQueries = scheduledQueryCount - DEFAULT_NUM_QUERIES;
const queryText = numMoreQueries === 1 ? 'Query' : 'Queries';
return (
<div className={`${baseClass}__more-queries-section`}>
<span>{numMoreQueries} More {queryText}</span>
<Button onClick={onShowAll} variant="unstyled">SHOW</Button>
</div>
);
}
return false;
}
render () {
const { renderShowMoreQueries } = this;
const { scheduledQueries } = this.props;
const { showAllQueries } = this.state;
const queriesToRender = showAllQueries ? scheduledQueries : take(scheduledQueries, DEFAULT_NUM_QUERIES);
return (
<div className={`${baseClass}__scheduled-queries`}>
<p className={`${baseClass}__section-label`}>Queries</p>
<ul className={`${baseClass}__queries-list`}>
{queriesToRender.map((scheduledQuery) => {
{scheduledQueries.map((scheduledQuery) => {
return (
<li key={`scheduled-query-${scheduledQuery.id}`}>
<Icon className={`${baseClass}__query-icon`} name="query" />
@@ -67,7 +28,6 @@ class ScheduledQueriesSection extends Component {
);
})}
</ul>
{renderShowMoreQueries()}
</div>
);
}
@@ -21,22 +21,6 @@
display: block;
}
&__more-queries-section {
@include display(flex);
@include justify-content(space-between);
color: $link;
font-size: 16px;
text-transform: uppercase;
button {
color: $link;
font-size: 16px;
font-weight: $normal;
text-transform: uppercase;
}
}
&__pack-icon {
color: $text-light;
margin-right: 11px;
@@ -9,10 +9,7 @@ import SecondarySidePanelContainer from '../SecondarySidePanelContainer';
import {
availability,
columnsToRender,
displayTypeForDataType,
numAdditionalColumns,
shouldShowAllColumns,
} from './helpers';
const baseClass = 'query-side-panel';
@@ -24,25 +21,6 @@ class QuerySidePanel extends Component {
selectedOsqueryTable: osqueryTableInterface,
};
componentWillMount () {
const { selectedOsqueryTable } = this.props;
const showAllColumns = shouldShowAllColumns(selectedOsqueryTable);
this.setState({ showAllColumns });
}
componentWillReceiveProps (nextProps) {
const { selectedOsqueryTable } = nextProps;
if (this.props.selectedOsqueryTable !== selectedOsqueryTable) {
const showAllColumns = shouldShowAllColumns(selectedOsqueryTable);
this.setState({ showAllColumns });
}
return false;
}
onSelectTable = (value) => {
const { onOsqueryTableSelect } = this.props;
@@ -51,10 +29,6 @@ class QuerySidePanel extends Component {
return false;
}
onShowAllColumns = () => {
this.setState({ showAllColumns: true });
}
onSuggestedQueryClick = (query) => {
return (evt) => {
evt.preventDefault();
@@ -67,8 +41,7 @@ class QuerySidePanel extends Component {
renderColumns = () => {
const { selectedOsqueryTable } = this.props;
const { showAllColumns } = this.state;
const columns = columnsToRender(selectedOsqueryTable, showAllColumns);
const columns = selectedOsqueryTable.columns;
const columnBaseClass = 'query-column-list';
return columns.map((column) => {
@@ -84,23 +57,6 @@ class QuerySidePanel extends Component {
});
}
renderMoreColumns = () => {
const { selectedOsqueryTable } = this.props;
const { showAllColumns } = this.state;
const { onShowAllColumns } = this;
if (showAllColumns) {
return false;
}
return (
<div className={`${baseClass}__column-wrapper`}>
<span className={`${baseClass}__more-columns`}>{numAdditionalColumns(selectedOsqueryTable)} MORE COLUMNS</span>
<button className={`button--unstyled ${baseClass}__show-columns`} onClick={onShowAllColumns}>SHOW</button>
</div>
);
}
renderTableSelect = () => {
const { onSelectTable } = this;
const { selectedOsqueryTable } = this.props;
@@ -122,7 +78,6 @@ class QuerySidePanel extends Component {
render () {
const {
renderColumns,
renderMoreColumns,
renderTableSelect,
} = this;
const { selectedOsqueryTable: { description, platform } } = this.props;
@@ -154,7 +109,6 @@ class QuerySidePanel extends Component {
<ul className={`${baseClass}__column-list`}>
{renderColumns()}
</ul>
{renderMoreColumns()}
</div>
</SecondarySidePanelContainer>
);
@@ -53,9 +53,4 @@ describe('QuerySidePanel - component', () => {
expect(onOsqueryTableSelect).toHaveBeenCalledWith('groups');
});
it('renders a CTA to show more columns', () => {
const component = mount(<QuerySidePanel {...props} />);
expect(component.text()).toContain('4 MORE COLUMNSSHOW');
});
});
@@ -60,22 +60,6 @@
border-top: 1px solid $accent-light;
}
&__more-columns {
@include flex-grow(1);
font-size: 14px;
font-weight: $light;
line-height: 1.43;
letter-spacing: 0.5px;
color: $text-medium;
}
&__show-columns {
color: $brand;
cursor: pointer;
font-size: 14px;
line-height: 1.43;
}
&__suggestion {
@include flex-grow(1);
font-size: 14px;
@@ -1,14 +1,7 @@
import { includes } from 'lodash';
const DEFAULT_NUM_COLUMNS_TO_DISPLAY = 5;
const ALL_PLATFORMS_AVAILABILITY = ['specs', 'utility'];
export const columnsToRender = (table, showAllColumns) => {
if (showAllColumns) return table.columns;
return table.columns.slice(0, DEFAULT_NUM_COLUMNS_TO_DISPLAY);
};
export const displayTypeForDataType = (dataType) => {
switch (dataType) {
case 'TEXT_TYPE':
@@ -22,18 +15,6 @@ export const displayTypeForDataType = (dataType) => {
}
};
export const shouldShowAllColumns = (table) => {
const { columns } = table;
return columns.length <= DEFAULT_NUM_COLUMNS_TO_DISPLAY;
};
export const numAdditionalColumns = (table) => {
const { columns } = table;
return columns.length - DEFAULT_NUM_COLUMNS_TO_DISPLAY;
};
export const availability = (platform) => {
if (!platform) {
return [];
@@ -9,9 +9,9 @@
width: $sidepanel-width;
margin-top: $pad-base;
margin-left: $pad-base;
min-height: 100%;
border-top-left-radius: 3px;
padding-top: $pad-base;
min-height: calc(100vh - #{$pad-base} - #{$footer-height});
@include breakpoint(smalldesk) {
width: $sidepanel-tablet-width;