UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

69 lines 5.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const react_core_1 = require("@patternfly/react-core"); const filter_icon_1 = require("@patternfly/react-icons/dist/js/icons/filter-icon"); const React = tslib_1.__importStar(require("react")); const agentStatus_1 = require("../helpers/agentStatus"); const common_1 = require("../../../common"); const use_translation_wrapper_1 = require("../../../common/hooks/use-translation-wrapper"); const getStatusesForFilter = (statuses) => { const filterStatuses = {}; const sortedStatuses = Object.keys(statuses).sort((a, b) => statuses[a].title.localeCompare(statuses[b].title)); sortedStatuses.forEach((status) => { const { category, title } = statuses[status]; if (filterStatuses[category]) { if (filterStatuses[category][title]) { filterStatuses[category][title].push(status); } else { filterStatuses[category] = Object.assign(Object.assign({}, filterStatuses[category]), { [title]: [status] }); } } else { filterStatuses[category] = { [title]: [status], }; } }); return filterStatuses; }; const getCategoryLabels = (t) => ({ 'Installation related': t('ai:Installation related'), 'Discovery related': t('ai:Discovery related'), 'Bare Metal Host related': t('ai:Bare Metal Host related'), }); const InfraTableToolbar = (_a) => { var { setSelectedHostIDs, massActions, hosts, statusFilter, statusCount, hostnameFilter, setHostnameFilter, setStatusFilter, selectedHostIDs } = _a, paginationProps = tslib_1.__rest(_a, ["setSelectedHostIDs", "massActions", "hosts", "statusFilter", "statusCount", "hostnameFilter", "setHostnameFilter", "setStatusFilter", "selectedHostIDs"]); const { t } = (0, use_translation_wrapper_1.useTranslation)(); const agentStatuses = (0, agentStatus_1.agentStatus)(t); const [statusFilterOpen, setStatusFilterOpen] = React.useState(false); const itemIDs = React.useMemo(() => hosts.map((h) => h.id), [hosts]); const filterStatuses = React.useMemo(() => getStatusesForFilter(agentStatuses), [agentStatuses]); const categoryLabels = getCategoryLabels(t); const onStatusFilterToggle = () => setStatusFilterOpen(!statusFilterOpen); const onStatusFilterSelect = (e, value) => { if (!(statusFilter === null || statusFilter === void 0 ? void 0 : statusFilter.includes(value))) { const newItems = (statusFilter ? [...statusFilter, value] : [value]); setStatusFilter(newItems); } else { setStatusFilter(statusFilter === null || statusFilter === void 0 ? void 0 : statusFilter.filter((f) => f !== value)); } }; return (React.createElement(common_1.TableToolbar, Object.assign({ selectedIDs: selectedHostIDs || [], itemIDs: itemIDs, setSelectedIDs: setSelectedHostIDs, actions: massActions, clearAllFilters: () => setStatusFilter([]) }, paginationProps), React.createElement(react_core_1.ToolbarItem, null, React.createElement(react_core_1.SearchInput, { placeholder: t('ai:Find by hostname'), value: hostnameFilter, onChange: (_e, value) => setHostnameFilter(value), onClear: () => setHostnameFilter(undefined) })), React.createElement(react_core_1.ToolbarItem, null, React.createElement(react_core_1.ToolbarFilter, { chips: statusFilter, deleteChip: (_, chip) => setStatusFilter(statusFilter === null || statusFilter === void 0 ? void 0 : statusFilter.filter((f) => f !== chip)), deleteChipGroup: () => setStatusFilter([]), categoryName: "Status" }, React.createElement(react_core_1.Dropdown, { isOpen: statusFilterOpen, onSelect: onStatusFilterSelect, onOpenChange: onStatusFilterToggle, toggle: (toggleRef) => (React.createElement(react_core_1.MenuToggle, { ref: toggleRef, isFullWidth: true, onClick: onStatusFilterToggle, isExpanded: statusFilterOpen, icon: React.createElement(filter_icon_1.FilterIcon, null) }, t('ai:Status'))), shouldFocusToggleOnSelect: true }, [ React.createElement(react_core_1.Grid, { key: "statuses", hasGutter: true, className: "table-toolbar__dropdown" }, Object.keys(filterStatuses).map((category) => (React.createElement(react_core_1.GridItem, { key: category, span: 4 }, React.createElement(react_core_1.DropdownGroup, { label: categoryLabels[category] }, Object.keys(filterStatuses[category]).map((label) => (React.createElement(react_core_1.DropdownItem, { hasCheckbox: true, key: label, value: label, isSelected: statusFilter === null || statusFilter === void 0 ? void 0 : statusFilter.includes(label) }, React.createElement(react_core_1.Split, { hasGutter: true }, React.createElement(react_core_1.SplitItem, null, label), React.createElement(react_core_1.SplitItem, null, React.createElement(react_core_1.Badge, { isRead: true }, statusCount[label] || 0))))))))))), ]))))); }; exports.default = InfraTableToolbar; //# sourceMappingURL=InfraTableToolbar.js.map