Skip to content
This repository was archived by the owner on Jul 23, 2023. It is now read-only.

Commit bf2a6b8

Browse files
authored
Add log type filter (#185)
1 parent 11e15cd commit bf2a6b8

File tree

3 files changed

+86
-5
lines changed

3 files changed

+86
-5
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import React, { useEffect, useState } from 'react';
2+
import { makeStyles, Select, MenuItem } from '@material-ui/core';
3+
import { uniq } from 'lodash';
4+
5+
import { logsText } from '../../helpers/static-text';
6+
import { LogLine, LogType } from '../../types';
7+
import { debugConsole } from '../../helpers/console-log';
8+
9+
const useStyles = makeStyles({
10+
root: {
11+
maxWidth: 150,
12+
overflowX: 'hidden',
13+
textOverflow: 'ellipsis',
14+
whiteSpace: 'nowrap',
15+
},
16+
});
17+
18+
type Props = {
19+
value: string;
20+
onChange: (value: string) => void;
21+
logLines: LogLine[];
22+
};
23+
24+
const LogTypeSelect: React.FunctionComponent<Props> = ({
25+
value,
26+
onChange,
27+
logLines,
28+
}) => {
29+
const styles = useStyles();
30+
const [logTypes, setLogTypes] = useState<LogType[]>([]);
31+
32+
useEffect(() => {
33+
debugConsole.log('useEffect: LogTypeSelect set log type');
34+
setLogTypes(uniq(logLines.map((line) => line.type)));
35+
}, [logLines]);
36+
37+
const handleLogTypeChange = ({
38+
target,
39+
}: React.ChangeEvent<{
40+
name?: string | undefined;
41+
value: unknown;
42+
}>) => {
43+
onChange(target.value as string);
44+
};
45+
46+
return (
47+
<Select
48+
variant="outlined"
49+
margin="dense"
50+
className={styles.root}
51+
value={value}
52+
onChange={handleLogTypeChange}
53+
displayEmpty
54+
>
55+
<MenuItem value={''}>{logsText.allTypes}</MenuItem>
56+
{logTypes.map((logType) => (
57+
<MenuItem value={logType} key={logType}>
58+
{logType}
59+
</MenuItem>
60+
))}
61+
</Select>
62+
);
63+
};
64+
65+
export default LogTypeSelect;

app/components/Logs/LogsPage.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { LogLine } from '../../types';
2121
import { useSettings } from '../../hooks';
2222
import FilterInput from '../FilterInput';
2323
import ModNameSelect from './ModNameSelect';
24+
import LogTypeSelect from './LogTypeSelect';
2425
import PageContainer from '../PageContainer';
2526
import { useRecoilState } from 'recoil';
2627
import { logLinesState } from '../../store';
@@ -63,6 +64,9 @@ const useStyles = makeStyles(({ palette, spacing }) => ({
6364
header: {
6465
backgroundColor: 'white',
6566
},
67+
typeSelectHeader: {
68+
width: 150,
69+
},
6670
modSelectHeader: {
6771
width: 150,
6872
},
@@ -100,6 +104,7 @@ const OwmlLog: React.FunctionComponent = () => {
100104

101105
const [paginatedLines, setPaginatedLines] = useState<LogLine[]>([]);
102106
const [selectedModName, setSelectedModName] = useState<string>('');
107+
const [selectedLogType, setSelectedLogType] = useState<string>('');
103108
const [filter, setFilter] = useState('');
104109
const [page, setPage] = useState<number>(0);
105110

@@ -122,16 +127,19 @@ const OwmlLog: React.FunctionComponent = () => {
122127
const lowerCaseFilter = filter.toLowerCase();
123128
const isFilteringByName = filter !== '';
124129
const isFilteringByMod = selectedModName !== '';
130+
const isFilteringByType = selectedLogType !== '';
125131

126132
let filteredLines: LogLine[] = [];
127-
if (isFilteringByName || isFilteringByMod) {
133+
if (isFilteringByName || isFilteringByMod || isFilteringByType) {
128134
filteredLines = logLines.filter((line) => {
129135
const isFromSelectedMod =
130136
!isFilteringByMod || line.modName === selectedModName;
137+
const isFromSelectedType =
138+
!isFilteringByType || line.type === selectedLogType;
131139
const isMatchWithFilter =
132140
!isFilteringByName ||
133141
line.text.toLowerCase().includes(lowerCaseFilter);
134-
return isMatchWithFilter && isFromSelectedMod;
142+
return isMatchWithFilter && isFromSelectedMod && isFromSelectedType;
135143
});
136144
} else {
137145
filteredLines = logLines;
@@ -152,12 +160,12 @@ const OwmlLog: React.FunctionComponent = () => {
152160
hasHiddenLines.current = logLines.length !== lines.length;
153161

154162
setPaginatedLines(lines);
155-
}, [filter, logLines, selectedModName, page, logLinesLimit]);
163+
}, [filter, logLines, selectedModName, selectedLogType, page, logLinesLimit]);
156164

157165
useEffect(() => {
158166
debugConsole.log('useEffect: LogsPage pagination reset');
159167
setPage(0);
160-
}, [filter, selectedModName]);
168+
}, [filter, selectedModName, selectedLogType]);
161169

162170
function handlePreviousPageClick() {
163171
setPage((prevPage) => prevPage + 1);
@@ -201,6 +209,13 @@ const OwmlLog: React.FunctionComponent = () => {
201209
</IconButton>
202210
</Tooltip>
203211
</LogCell>
212+
<LogCell className={styles.typeSelectHeader}>
213+
<LogTypeSelect
214+
value={selectedLogType}
215+
onChange={setSelectedLogType}
216+
logLines={logLines}
217+
/>
218+
</LogCell>
204219
<LogCell className={styles.modSelectHeader}>
205220
<ModNameSelect
206221
value={selectedModName}

app/helpers/static-text.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ export const logsText = {
2929
filterLogsLabel: 'Filter logs',
3030
clearLogs: 'Clear log entries',
3131
connectedToConsole: 'Client connected to console',
32-
allMods: 'All logs',
32+
allTypes: 'All types',
33+
allMods: 'All mods',
3334
disconnectedFromConsole: 'Client disconnected from console',
3435
consoleServerStart: (port: number) =>
3536
`Started console server on port ${port}`,

0 commit comments

Comments
 (0)