fleet/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.jsx
noahtalerman 028b968ff5
New styles for label creation form. (#101)
The goal of this PR is to update the styles of the LabelForm component.
Also include global style changes for form components (FormField, LabelForm, and others).
2020-12-07 15:08:59 -08:00

115 lines
3.4 KiB
JavaScript

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import osqueryTableInterface from 'interfaces/osquery_table';
import { osqueryTableNames } from 'utilities/osquery_tables';
import Dropdown from 'components/forms/fields/Dropdown';
import Icon from 'components/icons/Icon';
import PlatformIcon from 'components/icons/PlatformIcon';
import SecondarySidePanelContainer from '../SecondarySidePanelContainer';
import displayTypeForDataType from './helpers';
const baseClass = 'query-side-panel';
class QuerySidePanel extends Component {
static propTypes = {
onOsqueryTableSelect: PropTypes.func,
onTextEditorInputChange: PropTypes.func,
selectedOsqueryTable: osqueryTableInterface,
};
onSelectTable = (value) => {
const { onOsqueryTableSelect } = this.props;
onOsqueryTableSelect(value);
return false;
}
onSuggestedQueryClick = (query) => {
return (evt) => {
evt.preventDefault();
const { onTextEditorInputChange } = this.props;
return onTextEditorInputChange(query);
};
};
renderColumns = () => {
const { selectedOsqueryTable } = this.props;
const columns = selectedOsqueryTable.columns;
const columnBaseClass = 'query-column-list';
return columns.map((column) => {
return (
<li key={column.name} className={`${columnBaseClass}__item`}>
<span className={`${columnBaseClass}__name`}>{column.name}</span>
<div className={`${columnBaseClass}__description`}>
<span className={`${columnBaseClass}__type`}>{displayTypeForDataType(column.type)}</span>
<Icon name="help-solid" className={`${columnBaseClass}__help`} title={column.description} />
</div>
</li>
);
});
}
renderTableSelect = () => {
const { onSelectTable } = this;
const { selectedOsqueryTable } = this.props;
const tableNames = osqueryTableNames.map((name) => {
return { label: name, value: name };
});
return (
<Dropdown
options={tableNames}
value={selectedOsqueryTable.name}
onChange={onSelectTable}
placeholder="Choose Table..."
/>
);
}
render () {
const {
renderColumns,
renderTableSelect,
} = this;
const { selectedOsqueryTable: { description, platforms } } = this.props;
return (
<SecondarySidePanelContainer className={baseClass}>
<div className={`${baseClass}__choose-table`}>
<h2 className={`${baseClass}__header`}>Documentation</h2>
{renderTableSelect()}
<p className={`${baseClass}__description`}>{description}</p>
</div>
<div className={`${baseClass}__os-availability`}>
<h2 className={`${baseClass}__header`}>OS Availability</h2>
<ul className={`${baseClass}__platforms`}>
{platforms.map((platform) => {
if (platform === 'all') {
return <li key={platform}><Icon name="hosts" /> {platform}</li>;
}
return <li key={platform}><PlatformIcon name={platform} title={platform} /> {platform}</li>;
})}
</ul>
</div>
<div className={`${baseClass}__columns`}>
<h2 className={`${baseClass}__header`}>Columns</h2>
<ul className={`${baseClass}__column-list`}>
{renderColumns()}
</ul>
</div>
</SecondarySidePanelContainer>
);
}
}
export default QuerySidePanel;