import { Fragment, useState } from 'react'; import { Badge, Button, MenuToggle, SearchInput, Select, SelectList, SelectOption, PageSection, Toolbar, ToolbarContent, ToolbarGroup, ToolbarItem, ToolbarToggleGroup, Tooltip, Dropdown, DropdownItem, DropdownList, MenuFooter } from '@patternfly/react-core'; import { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper'; import PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon'; import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon'; import RhMicronsExternalLinkIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-external-link-icon'; import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon'; import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon'; export const ConsoleLogViewerToolbar: React.FC = () => { const firstOptions = { 'container-sample-1': { type: 'C' }, 'container-sample-2': { type: 'D' }, 'container-sample-3': { type: 'E' } }; const [containerExpanded, setContainerExpanded] = useState(false); const [containerExpandedMobile, setContainerExpandedMobile] = useState(false); const [containerSelected, setContainerSelected] = useState(Object.keys(firstOptions)[0]); const [optionExpanded, setOptionExpanded] = useState(false); const [optionExpandedMobile, setOptionExpandedMobile] = useState(false); const [isPaused, setIsPaused] = useState(false); const [firstSwitchChecked, setFirstSwitchChecked] = useState(true); const [secondSwitchChecked, setSecondSwitchChecked] = useState(false); const [searchValue, setSearchValue] = useState(''); const [searchResultsCount, setSearchResultsCount] = useState(3); const [currentSearchResult, setCurrentSearchResult] = useState(1); const [externalExpanded, setExternalExpanded] = useState(false); const [externalExpandedMobile, setExternalExpandedMobile] = useState(false); const [downloadExpanded, setDownloadExpanded] = useState(false); const [downloadExpandedMobile, setDownloadExpandedMobile] = useState(false); const [mobileView, setMobileView] = useState(window.innerWidth >= 1450 ? false : true); const onContainerToggle = () => { setContainerExpanded((prevState) => !prevState); }; const onContainerToggleMobile = () => { setContainerExpandedMobile((prevState) => !prevState); }; const onContainerSelect = (_event: React.MouseEvent | undefined, selection: string | number | undefined) => { setContainerSelected(selection as string); setContainerExpanded(false); }; const onContainerSelectMobile = (_event: React.MouseEvent | undefined, selection: string | number | undefined) => { setContainerSelected(selection as string); setContainerExpandedMobile(false); }; const onOptionSelect = (_event: React.MouseEvent | undefined) => {}; const onOptionSelectMobile = (_event: React.MouseEvent | undefined) => {}; const onOptionToggle = () => { setOptionExpanded((prevState) => !prevState); }; const onOptionToggleMobile = () => { setOptionExpandedMobile((prevState) => !prevState); }; const onExternalToggle = () => { setExternalExpanded((prevState) => !prevState); }; const onExternalToggleMobile = () => { setExternalExpandedMobile((prevState) => !prevState); }; const onExternalSelect = () => { setExternalExpanded(false); }; const onExternalSelectMobile = () => { setExternalExpandedMobile(false); }; const onDownloadToggle = () => { setDownloadExpanded((prevState) => !prevState); }; const onDownloadToggleMobile = () => { setDownloadExpandedMobile((prevState) => !prevState); }; const onDownloadSelect = () => { setDownloadExpanded(false); }; const onDownloadSelectMobile = () => { setDownloadExpandedMobile(false); }; const onExternalClick = (_event: React.MouseEvent) => { // eslint-disable-next-line no-console console.log('External logs opened!'); }; const onDownloadClick = (_event: React.MouseEvent) => { // eslint-disable-next-line no-console console.log('Download action clicked!'); }; const pauseOrStart = (_event: React.MouseEvent) => { setIsPaused((prevState) => !prevState); }; const handleFirstSwitchChange = () => { setFirstSwitchChecked((prevState) => !prevState); }; const handleSecondSwitchChange = () => { setSecondSwitchChecked((prevState) => !prevState); }; const onClearLogs = () => { setOptionExpanded(false); // eslint-disable-next-line no-console console.log('Logs cleared!'); }; const onClearLogsMobile = () => { setOptionExpandedMobile(false); // eslint-disable-next-line no-console console.log('Logs cleared!'); }; const onSearchChange = (_event: React.FormEvent, value: string) => { setSearchValue(value); setSearchResultsCount(3); }; const onSearchClear = (_event: React.SyntheticEvent) => { setSearchValue(''); setSearchResultsCount(0); setCurrentSearchResult(1); }; const onSearchNext = (_event: React.SyntheticEvent) => { setCurrentSearchResult((prevState) => { const newCurrentResult = prevState + 1; return newCurrentResult <= searchResultsCount ? newCurrentResult : searchResultsCount; }); }; const onSearchPrevious = (_event: React.SyntheticEvent) => { setCurrentSearchResult((prevState) => { const newCurrentResult = prevState - 1; return newCurrentResult > 0 ? newCurrentResult : 1; }); }; const onPageResize = ( _event: MouseEvent | TouchEvent | React.KeyboardEvent, { windowSize }: { windowSize: number } ) => { if (windowSize >= 1450) { setMobileView(false); } else { setMobileView(true); } }; const externalDropdownItems = ( <> External logs 1 External logs 2 External logs 3 ); const downloadDropdownItems = ( <> Current container logs All container logs ); const optionSelectItems = ( <> Display timestamp Wrap lines ); const selectDropdownContent = ( <> {Object.entries(firstOptions).map(([value, { type }]) => ( {type} {` ${value}`} ))} ); const clearLogsFooter = (type: string) => ( ); const selectToggleContent = ({ showText }: { showText: boolean }) => { if (!containerSelected) { return 'Select'; } return ( {firstOptions[containerSelected].type} {showText && ` ${containerSelected}`} ); }; const LogsSearchInput = ( } breakpoint="lg"> ); const leftAlignedItemsDesktop = ( ); const leftAlignedItemsMobile = ( Select container}> Options}> {isPaused ? 'Resume log' : 'Pause log'}}>