* 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
86 lines
2.1 KiB
TypeScript
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);
|
|
});
|
|
}
|
|
}
|