mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
* use new data table in user manage page' * remove default empty array hiddenColumns props, was causing render performance problems * remove unused tooltip in hostcontainer * add search to user manage table * add query params to user GET requests * move createUserForm closer to user management page * starting to implement create user modal * starting to add team checking functionality to create user * styling of select team form * changing logic for selectedTeamsForm, simplifying * updated SelectedTeamsForm to handle own state and pass back relevant state to parent * created reusable infobanner component and use it in osquery options page * use infobanner in createuserform * create new Radio component and use in createuserform * create new Radio component and use in createuserform * added new radio buttons to createUserForm * finish custom radio button styling * finish styling of radio in createUserForm * fix and add entities/users#loadAll tests * remove unneeded tests and updated broken ones on UserManagementPage * remove unused modules
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
import React, { useState } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
|
|
import Checkbox from '../../../../../components/forms/fields/Checkbox';
|
|
import Button from '../../../../../components/buttons/Button';
|
|
|
|
const useCheckboxListStateManagement = (allColumns, hiddenColumns) => {
|
|
const [columnItems, setColumnItems] = useState(() => {
|
|
return allColumns.map((column) => {
|
|
return {
|
|
name: column.title,
|
|
accessor: column.accessor,
|
|
isChecked: !hiddenColumns.includes(column.accessor),
|
|
disableHidden: column.disableHidden,
|
|
};
|
|
});
|
|
});
|
|
|
|
const updateColumnItems = (columnAccessor) => {
|
|
setColumnItems((prevState) => {
|
|
const selectedColumn = columnItems.find(column => column.accessor === columnAccessor);
|
|
const updatedColumn = {
|
|
...selectedColumn,
|
|
isChecked: !selectedColumn.isChecked,
|
|
};
|
|
|
|
// this is replacing the column object with the updatedColumn we just created.
|
|
const newState = prevState.map((currentColumn) => {
|
|
return currentColumn.accessor === columnAccessor ? updatedColumn : currentColumn;
|
|
});
|
|
return newState;
|
|
});
|
|
};
|
|
|
|
return [columnItems, updateColumnItems];
|
|
};
|
|
|
|
const getHiddenColumns = (columns) => {
|
|
return columns.filter(column => !column.isChecked)
|
|
.map(column => column.accessor);
|
|
};
|
|
|
|
const EditColumnsModal = (props) => {
|
|
const { columns, hiddenColumns, onSaveColumns, onCancelColumns } = props;
|
|
|
|
const [columnItems, updateColumnItems] = useCheckboxListStateManagement(columns, hiddenColumns);
|
|
|
|
return (
|
|
<div className={'edit-column-modal'}>
|
|
<p>Choose which columns you see</p>
|
|
<div className={'modal-items'}>
|
|
{columnItems.map((column) => {
|
|
if (column.disableHidden) return null;
|
|
return (
|
|
<div key={column.accessor}>
|
|
<Checkbox
|
|
name={column.name}
|
|
value={column.isChecked}
|
|
onChange={() => updateColumnItems(column.accessor)}
|
|
>
|
|
<span>{column.name}</span>
|
|
</Checkbox>
|
|
</div>
|
|
);
|
|
})}
|
|
</div>
|
|
<div className={'button-actions'}>
|
|
<Button
|
|
onClick={onCancelColumns}
|
|
variant={'inverse'}
|
|
>
|
|
Cancel
|
|
</Button>
|
|
<Button
|
|
className={'save-button'}
|
|
onClick={() => onSaveColumns(getHiddenColumns(columnItems))}
|
|
variant={'default'}
|
|
>
|
|
Save
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
EditColumnsModal.propTypes = {
|
|
columns: PropTypes.arrayOf(PropTypes.object), // TODO: create proper interface for this
|
|
hiddenColumns: PropTypes.arrayOf(PropTypes.string),
|
|
onSaveColumns: PropTypes.func,
|
|
onCancelColumns: PropTypes.func,
|
|
};
|
|
|
|
export default EditColumnsModal;
|