Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(filter): Clear existing log level filter when opening a new file (fixes #133). #141

Merged
merged 9 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 29 additions & 14 deletions src/components/StatusBar/LogLevelSelect/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ import {
LOG_LEVEL_NAMES,
MAX_LOG_LEVEL,
} from "../../../typings/logs";
import {UI_ELEMENT} from "../../../typings/states";
import {
UI_ELEMENT,
UI_STATE,
} from "../../../typings/states";
import {range} from "../../../utils/data";
import {
ignorePointerIfFastLoading,
Expand Down Expand Up @@ -151,7 +154,7 @@ const ClearFiltersOption = ({onClick}: ClearFiltersOptionProps) => {
* @return
*/
const LogLevelSelect = () => {
const {uiState, setLogLevelFilter} = useContext(StateContext);
const {uiState, filterLogs} = useContext(StateContext);
const [selectedLogLevels, setSelectedLogLevels] = useState<LOG_LEVEL[]>([]);
const disabled = isDisabled(uiState, UI_ELEMENT.LOG_LEVEL_FILTER);

Expand All @@ -169,6 +172,17 @@ const LogLevelSelect = () => {
</Box>
);

const updateFilter = useCallback((logLevels: LOG_LEVEL[]) => {
setSelectedLogLevels(logLevels);

filterLogs((0 === logLevels.length ?
null :
logLevels));
}, [
filterLogs,
setSelectedLogLevels,
]);

const handleCheckboxClick = useCallback((ev: React.MouseEvent<HTMLInputElement>) => {
ev.preventDefault();
ev.stopPropagation();
Expand All @@ -184,8 +198,11 @@ const LogLevelSelect = () => {
value,
];
}
setSelectedLogLevels(newSelectedLogLevels.sort((a, b) => a - b));
}, [selectedLogLevels]);
updateFilter(newSelectedLogLevels.sort((a, b) => a - b));
}, [
selectedLogLevels,
updateFilter,
]);
Comment on lines +201 to +205
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Sorting log levels is unnecessary and can be removed

The log level filtering is implemented through a worker interface that simply accepts an array of log levels as a filter, with no indication that order matters. The filterLogs function in StateContextProvider passes the log levels directly to the worker without any ordering requirements.

  • Remove the .sort((a, b) => a - b) from line 202 in src/components/StatusBar/LogLevelSelect/index.tsx
  • The order of log levels in the filter array doesn't affect the filtering functionality
🔗 Analysis chain

Verify the necessity of sorting log levels.

The implementation looks correct, but let's verify if sorting the log levels is necessary for the backend processing.

Also applies to: 217-218, 221-221

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for log level array usage in backend processing
rg -A 5 "logLevels?.sort" 
# Search for order-dependent log level processing
ast-grep --pattern 'function $_(logLevels: $_) {
  $$$
  for ($_ of logLevels) {
    $$$
  }
  $$$
}'

Length of output: 131


Script:

#!/bin/bash
# Search for log level filtering or processing patterns
rg -A 5 "logLevel.*filter" 

# Search for any log level array handling
rg -A 5 "LogLevel\[]"

# Look for log level type definitions and interfaces
ast-grep --pattern 'type $_ = {
  $$$
  logLevel$_: $_
  $$$
}'

# Search for log level comparisons or ordering
rg -A 5 "LogLevel.*compare|LogLevel.*order"

Length of output: 531


Script:

#!/bin/bash
# Search for the LogLevelSelect component's interface and state handling
rg -A 10 "interface.*LogLevelSelect" 

# Look for filter state updates in the context
rg -A 10 "updateFilter.*LogLevel" 

# Search for log level enum or type definition
ast-grep --pattern 'enum LogLevel {
  $$$
}'

# Check how log levels are used in filtering
rg -A 10 "filterLogs|applyFilter.*logLevel"

Length of output: 6574


const handleOptionClick = useCallback((ev: React.MouseEvent) => {
const currentTarget = ev.currentTarget as HTMLElement;
Expand All @@ -196,21 +213,19 @@ const LogLevelSelect = () => {
}

const selectedValue = Number(currentTarget.dataset.value);
setSelectedLogLevels(range({begin: selectedValue, end: 1 + MAX_LOG_LEVEL}));
}, []);
updateFilter(range({begin: selectedValue, end: 1 + MAX_LOG_LEVEL}));
}, [updateFilter]);

const handleSelectClearButtonClick = () => {
setSelectedLogLevels([]);
updateFilter([]);
};

// On `uiState` update, clear `selectedLogLevels` if the state is `UI_STATE.FILE_LOADING`
useEffect(() => {
setLogLevelFilter((0 === selectedLogLevels.length ?
null :
selectedLogLevels));
}, [
setLogLevelFilter,
selectedLogLevels,
]);
if (UI_STATE.FILE_LOADING === uiState) {
setSelectedLogLevels([]);
}
}, [uiState]);

return (
<Select
Expand Down
8 changes: 4 additions & 4 deletions src/contexts/StateContextProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ interface StateContextType {
queryResults: QueryResults,

exportLogs: () => void,
filterLogs: (filter: LogLevelFilter) => void,
loadFile: (fileSrc: FileSrcType, cursor: CursorType) => void,
loadPageByAction: (navAction: NavigationAction) => void,
setIsSettingsModalOpen: (isOpen: boolean) => void,
setLogLevelFilter: (filter: LogLevelFilter) => void,
startQuery: (queryString: string, isRegex: boolean, isCaseSensitive: boolean) => void,
}
const StateContext = createContext<StateContextType>({} as StateContextType);
Expand All @@ -103,10 +103,10 @@ const STATE_DEFAULT: Readonly<StateContextType> = Object.freeze({
uiState: UI_STATE.UNOPENED,

exportLogs: () => null,
filterLogs: () => null,
loadFile: () => null,
loadPageByAction: () => null,
setIsSettingsModalOpen: () => null,
setLogLevelFilter: () => null,
startQuery: () => null,
});

Expand Down Expand Up @@ -446,7 +446,7 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
loadPageByCursor(mainWorkerRef.current, cursor);
}, []);

const setLogLevelFilter = useCallback((filter: LogLevelFilter) => {
const filterLogs = useCallback((filter: LogLevelFilter) => {
if (null === mainWorkerRef.current) {
return;
}
Expand Down Expand Up @@ -549,10 +549,10 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
uiState: uiState,

exportLogs: exportLogs,
filterLogs: filterLogs,
loadFile: loadFile,
loadPageByAction: loadPageByAction,
setIsSettingsModalOpen: setIsSettingsModalOpen,
setLogLevelFilter: setLogLevelFilter,
startQuery: startQuery,
}}
>
Expand Down
Loading