|
@@ -47,8 +47,27 @@ const LogPage = () => {
|
|
const isDark = theme.palette.mode === "dark";
|
|
const isDark = theme.palette.mode === "dark";
|
|
const [logState, setLogState] = useState("all");
|
|
const [logState, setLogState] = useState("all");
|
|
const [filterText, setFilterText] = useState("");
|
|
const [filterText, setFilterText] = useState("");
|
|
-
|
|
|
|
|
|
+ const [useRegexSearch, setUseRegexSearch] = useState(true);
|
|
|
|
+ const [hasInputError, setInputError] = useState(false);
|
|
|
|
+ const [inputHelperText, setInputHelperText] = useState("");
|
|
const filterLogs = useMemo(() => {
|
|
const filterLogs = useMemo(() => {
|
|
|
|
+ setInputHelperText("");
|
|
|
|
+ setInputError(false);
|
|
|
|
+ if (useRegexSearch) {
|
|
|
|
+ try {
|
|
|
|
+ const regex = new RegExp(filterText);
|
|
|
|
+ return logData.filter((data) => {
|
|
|
|
+ return (
|
|
|
|
+ regex.test(data.payload) &&
|
|
|
|
+ (logState === "all" ? true : data.type.includes(logState))
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+ } catch (err: any) {
|
|
|
|
+ setInputHelperText(err.message.substring(0, 60));
|
|
|
|
+ setInputError(true);
|
|
|
|
+ return logData;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return logData.filter((data) => {
|
|
return logData.filter((data) => {
|
|
return (
|
|
return (
|
|
data.payload.includes(filterText) &&
|
|
data.payload.includes(filterText) &&
|
|
@@ -91,7 +110,7 @@ const LogPage = () => {
|
|
pt: 1,
|
|
pt: 1,
|
|
mb: 0.5,
|
|
mb: 0.5,
|
|
mx: "10px",
|
|
mx: "10px",
|
|
- height: "36px",
|
|
|
|
|
|
+ height: "48px",
|
|
display: "flex",
|
|
display: "flex",
|
|
alignItems: "center",
|
|
alignItems: "center",
|
|
}}
|
|
}}
|
|
@@ -107,8 +126,31 @@ const LogPage = () => {
|
|
</StyledSelect>
|
|
</StyledSelect>
|
|
|
|
|
|
<BaseStyledTextField
|
|
<BaseStyledTextField
|
|
|
|
+ error={hasInputError}
|
|
value={filterText}
|
|
value={filterText}
|
|
onChange={(e) => setFilterText(e.target.value)}
|
|
onChange={(e) => setFilterText(e.target.value)}
|
|
|
|
+ helperText={inputHelperText}
|
|
|
|
+ placeholder={t("Filter conditions")}
|
|
|
|
+ InputProps={{
|
|
|
|
+ sx: { pr: 1 },
|
|
|
|
+ endAdornment: (
|
|
|
|
+ <IconButton
|
|
|
|
+ sx={{ p: 0.5 }}
|
|
|
|
+ title={t("Use Regular Expression")}
|
|
|
|
+ style={{
|
|
|
|
+ backgroundColor: useRegexSearch
|
|
|
|
+ ? "rgba(20, 20, 20, 0.2)"
|
|
|
|
+ : "rgba(30, 0, 0, 0.0)",
|
|
|
|
+ fontSize: "150%",
|
|
|
|
+ fontWeight: "800",
|
|
|
|
+ borderRadius: "10%",
|
|
|
|
+ }}
|
|
|
|
+ onClick={() => setUseRegexSearch(!useRegexSearch)}
|
|
|
|
+ >
|
|
|
|
+ .*
|
|
|
|
+ </IconButton>
|
|
|
|
+ ),
|
|
|
|
+ }}
|
|
/>
|
|
/>
|
|
</Box>
|
|
</Box>
|
|
|
|
|