fleet/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/QueryTableColumns.tsx
Gabriel Hernandez a950e9d095
Feat/update query doc sidepanel (#8214)
* create new components for query side panel

* add reusable icon component that uses svg for icons

* integrate with new osquery_fleet_schema.json data

* update UI to work with osquery_fleet_schema.json

* add remark-gfm to safely support direct urls in markdown

* move fleet ace into markdown component so we can render code with ace editor

* add testing for new query sidebar

* remove incomplete tests for query sidepanel
2022-10-14 17:45:57 +01:00

47 lines
1.3 KiB
TypeScript

import React from "react";
import { IQueryTableColumn } from "interfaces/osquery_table";
import ColumnListItem from "./ColumnListItem";
const sortAlphabetically = (
columnA: IQueryTableColumn,
columnB: IQueryTableColumn
) => {
return columnA.name.localeCompare(columnB.name);
};
/**
* Orders the columns by required columns first sorted alphabetically,
* then the rest of the columns sorted alphabetically.
*/
const orderColumns = (columns: IQueryTableColumn[]) => {
const requiredColumns = columns.filter((column) => column.required);
const nonRequiredColumns = columns.filter((column) => !column.required);
const sortedRequiredColumns = requiredColumns.sort(sortAlphabetically);
const sortedNonRequiredColumns = nonRequiredColumns.sort(sortAlphabetically);
return [...sortedRequiredColumns, ...sortedNonRequiredColumns];
};
interface IQueryTableColumnsProps {
columns: IQueryTableColumn[];
}
const baseClass = "query-table-columns";
const QueryTableColumns = ({ columns }: IQueryTableColumnsProps) => {
const columnListItems = orderColumns(columns).map((column) => {
return <ColumnListItem key={column.name} column={column} />;
});
return (
<div className={baseClass}>
<h3>Columns</h3>
<ul className={`${baseClass}__column-list`}>{columnListItems}</ul>
</div>
);
};
export default QueryTableColumns;