openreplay/frontend/app/services/RecordingsService.ts
Delirium a2fce7e291
Assist stats UI (#1489)
* feat(ui): start assist stats

* feat(ui): design mock up for stats

* feat(ui): naming...

* feat(ui): types, api service, some changes for recs and loaders

* feat(ui): csv export button/request

* feat(ui): csv export button/request

* feat(ui): format dates

* feat(ui): some fixes for stats requests

* fix(tracker): fix test

* fix(tracker): fix ci build

* fix(tracker): fix assist tests

* fix(tracker): bump test coverage, fix minor bug

* fix(ui): more cypress fixes

* fix(ui): add proj id to socket connection

* fix(ui): remove console log

* fix(ui): update filters

* feat(ui):fix some api keys for stats

* feat(ui): fix type

* feat(ui): remove unused

* feat(ui): some fixes

* feat(ui): some fixes 2

* fix(ui): some search fixes

* fix(ui): change api keys

* fix(ui): change api keys

* fix(ui): pdf button fix

* fix(ui): pdf button fix

* fix(ui): some ui fixes after review

* fix(ui): fix csv export

* fix(ui): change header for pds export for stats

* fix(ui): change header width for exports
2023-10-16 13:54:37 +02:00

86 lines
2.1 KiB
TypeScript

import APIClient from 'App/api_client';
interface RecordingData {
name: string;
duration: number;
sessionId: string;
}
interface FetchFilter {
page: number;
limit: number;
order: 'asc' | 'desc';
query: string;
startTimestamp: number;
endTimestamp: number;
userId?: string;
}
export interface IRecord {
createdAt: number;
createdBy: string;
duration: number;
name: string;
recordId: number;
sessionId: number;
userId: number;
URL?: string;
}
export default class RecordingsService {
private client: APIClient;
constructor(client?: APIClient) {
this.client = client ? client : new APIClient();
}
initClient(client?: APIClient) {
this.client = client || new APIClient();
}
reserveUrl(siteId: string, recordingData: RecordingData): Promise<{ URL: string; key: string }> {
return this.client.put(`/${siteId}/assist/save`, recordingData).then((r) => {
return r.json().then((j) => j.data);
});
}
saveFile(url: string, file: Blob) {
return fetch(url, {
method: 'PUT',
headers: { 'Content-Type': 'video/webm' },
body: file,
}).then(() => {
return true;
});
}
confirmFile(siteId: string, recordingData: RecordingData, key: string): Promise<any> {
return this.client.put(`/${siteId}/assist/save/done`, { ...recordingData, key }).then((r) => {
return r.json().then((j) => j.data);
});
}
fetchRecordings(filters: FetchFilter): Promise<any> {
return this.client.post(`/assist/records`, filters).then((r) => {
return r.json().then((j) => j.data);
});
}
fetchRecording(id: number | string): Promise<IRecord> {
return this.client.get(`/assist/records/${id}`).then((r) => {
return r.json().then((j) => j.data);
});
}
updateRecordingName(id: number, name: string): Promise<IRecord> {
return this.client.post(`/assist/records/${id}`, { name }).then((r) => {
return r.json().then((j) => j.data);
});
}
deleteRecording(id: number): Promise<any> {
return this.client.delete(`/assist/records/${id}`).then((r) => {
return r.json().then((j) => j.data);
});
}
}