Skip to content

Commit 374097d

Browse files
preserve filters in query params in audit logs
1 parent 36e4ec1 commit 374097d

File tree

1 file changed

+51
-8
lines changed

1 file changed

+51
-8
lines changed

client/packages/lowcoder/src/pages/setting/audit/dashboard.tsx

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import { getAuditLogs } from "api/enterpriseApi";
1616
import EventTypeTimeChart from "./charts/eventTypesTime";
1717
import { debounce } from "lodash";
1818
import { DatePicker } from "antd";
19-
import dayjs from "dayjs";
20-
import { Link } from "react-router-dom";
19+
import dayjs, { Dayjs } from "dayjs";
20+
import { Link, useLocation } from "react-router-dom";
21+
import history from "util/history";
2122
import { SETTING_URL } from "@lowcoder-ee/constants/routesURL";
2223
import { EyeOutlined } from "@ant-design/icons";
2324

@@ -102,6 +103,7 @@ export function AuditLogDashboard() {
102103
};
103104

104105
const currentUser = useSelector(getUser);
106+
const location = useLocation();
105107

106108
const [allLogs, setAllLogs] = useState<AuditLog[]>([]);
107109
const [currentPageLogs, setCurrentPageLogs] = useState<AuditLog[]>([]);
@@ -112,8 +114,47 @@ export function AuditLogDashboard() {
112114
const [form] = Form.useForm();
113115
const [pagination, setPagination] = useState({ pageSize: 25, current: 1 });
114116

115-
// Add state to store date range
116-
const [dateRange, setDateRange] = useState<{ fromTimestamp?: string; toTimestamp?: string }>({});
117+
// Function to get URL parameters
118+
const getQueryParams = () => {
119+
const params = new URLSearchParams(location.search);
120+
let queryObject: Record<string, any> = {};
121+
122+
// Convert search params into a JavaScript object
123+
params.forEach((value, key) => {
124+
if (key !== 'fromTimestamp' && key !== 'toTimestamp') {
125+
queryObject[key] = value;
126+
}
127+
});
128+
129+
// set date range picker values
130+
let dateRange = new Array<Dayjs>(2);
131+
if (params.get('fromTimestamp')) {
132+
dateRange[0] = dayjs(params.get('fromTimestamp'));
133+
}
134+
if (params.get('toTimestamp')) {
135+
dateRange[1] = dayjs(params.get('toTimestamp'));
136+
}
137+
138+
queryObject['dateRange'] = dateRange;
139+
return queryObject;
140+
};
141+
142+
useEffect(() => {
143+
form.setFieldsValue(getQueryParams());
144+
}, []);
145+
146+
const handleQueryParams = (queryParams: Record<string, string>) => {
147+
const params = new URLSearchParams();
148+
Object.keys(queryParams).map((key) => {
149+
const value = queryParams[key];
150+
if (value) {
151+
params.set(key, value);
152+
} else {
153+
params.delete(key); // Remove the key if the value is empty
154+
}
155+
})
156+
history.push({ search: params.toString() })
157+
}
117158

118159
// Fetch Logs with all form values if set
119160
const fetchLogs = async (newPage: number, resetData: boolean = false) => {
@@ -126,18 +167,20 @@ export function AuditLogDashboard() {
126167
pageNum: newPage, // API page number
127168
fromTimestamp: formValues.dateRange?.[0] ? formValues.dateRange[0].toISOString() : undefined,
128169
toTimestamp: formValues.dateRange?.[1] ? formValues.dateRange[1].toISOString() : undefined,
129-
}).filter(([_, value]) => value !== undefined && value !== null && value !== "")
170+
}).filter(([key, value]) => value !== undefined && value !== null && value !== "" && key !== 'dateRange')
130171
);
131-
172+
173+
handleQueryParams(cleanedParams as any);
174+
132175
setLoading(true);
133176
try {
134177
const data = await getAuditLogs(cleanedParams);
135178

136179
if (resetData) {
137-
setAllLogs(data.data);
180+
setAllLogs(data.data || []);
138181
setPagination({ pageSize: 25, current: 1 }); // Reset pagination
139182
} else {
140-
setAllLogs((prevLogs) => [...prevLogs, ...data.data]);
183+
setAllLogs((prevLogs) => [...prevLogs, ...(data?.data || [])]);
141184
}
142185

143186
setTotal(data.totalCount);

0 commit comments

Comments
 (0)