openreplay/frontend/app/mstore/auditStore.ts
Andrey Babushkin fd5c0c9747
Add lokalisation (#3092)
* applied eslint

* add locales and lint the project

* removed error boundary

* updated locales

* fix min files

* fix locales
2025-03-06 17:43:15 +01:00

104 lines
2.6 KiB
TypeScript

import { makeAutoObservable, runInAction, observable, action } from 'mobx';
import { auditService } from 'App/services';
import Period, { LAST_7_DAYS } from 'Types/app/period';
import { toast } from 'react-toastify';
import { exportCSVFile } from 'App/utils';
import { DateTime } from 'luxon'; // TODO
import Audit from './types/audit';
export default class AuditStore {
list: any[] = [];
total: number = 0;
page: number = 1;
pageSize: number = 20;
searchQuery: string = '';
isLoading: boolean = false;
order: string = 'desc';
period: Period | null = Period({ rangeName: LAST_7_DAYS });
constructor() {
makeAutoObservable(this, {
searchQuery: observable,
period: observable,
updateKey: action,
fetchAudits: action,
setDateRange: action,
});
}
setDateRange(data: any) {
this.period = data;
}
updateKey(key: string, value: any) {
this[key] = value;
}
fetchAudits = (data: any): Promise<void> => {
this.isLoading = true;
return new Promise((resolve, reject) => {
auditService
.all(data)
.then((response) => {
runInAction(() => {
this.list = response.sessions.map((item) => Audit.fromJson(item));
this.total = response.count;
});
resolve();
})
.catch((error) => {
reject(error);
})
.finally(() => {
this.isLoading = false;
});
});
};
fetchAllAudits = async (data: any): Promise<any> =>
new Promise((resolve, reject) => {
auditService
.all(data)
.then((data) => {
const headers = [
{ label: 'User', key: 'username' },
{ label: 'Email', key: 'email' },
{ label: 'UserID', key: 'userId' },
{ label: 'Method', key: 'method' },
{ label: 'Action', key: 'action' },
{ label: 'Endpoint', key: 'endpoint' },
{ label: 'Created At', key: 'createdAt' },
];
data = data.sessions.map((item) => ({
...item,
createdAt: DateTime.fromMillis(item.createdAt).toFormat(
'LLL dd yyyy hh:mm a',
),
}));
exportCSVFile(
headers,
data,
`audit-${new Date().toLocaleDateString()}`,
);
resolve(data);
})
.catch((error) => {
reject(error);
});
});
exportToCsv = async (): Promise<void> => {
const promise = this.fetchAllAudits({ limit: this.total });
toast.promise(promise, {
pending: 'Exporting...',
success: 'Export successful',
});
};
}