2022-11-18 14:25:58 +00:00
|
|
|
import React, { useContext } from "react";
|
2022-10-14 16:45:57 +00:00
|
|
|
|
|
|
|
|
import { IQueryTableColumn } from "interfaces/osquery_table";
|
2022-11-18 14:25:58 +00:00
|
|
|
import { QueryContext } from "context/query";
|
2022-10-14 16:45:57 +00:00
|
|
|
|
|
|
|
|
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) => {
|
2022-11-18 14:25:58 +00:00
|
|
|
const { selectedOsqueryTable } = useContext(QueryContext);
|
|
|
|
|
|
2024-04-10 17:23:22 +00:00
|
|
|
const columnListItems = orderColumns(columns).map((column) => {
|
|
|
|
|
return (
|
|
|
|
|
<ColumnListItem
|
|
|
|
|
key={column.name}
|
|
|
|
|
column={column}
|
|
|
|
|
selectedTableName={selectedOsqueryTable.name}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
});
|
2022-10-14 16:45:57 +00:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className={baseClass}>
|
|
|
|
|
<h3>Columns</h3>
|
|
|
|
|
<ul className={`${baseClass}__column-list`}>{columnListItems}</ul>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default QueryTableColumns;
|