openreplay/frontend/app/mstore/notesStore.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

203 lines
4.1 KiB
TypeScript

import { makeAutoObservable } from 'mobx';
import { notesService } from 'App/services';
import { Note, NotesFilter, WriteNote, iTag } from 'App/services/NotesService';
export const noNoteMsg = 'No Comment';
export default class NotesStore {
notes: Note[] = [];
sessionNotes: Note[] = [];
loading: boolean;
page = 1;
pageSize = 9;
activeTags: iTag[] = [];
sort = 'createdAt';
order: 'DESC' | 'ASC' = 'DESC';
ownOnly = false;
total = 0;
isSaving = false;
query = '';
editNote: Note | null = null;
constructor() {
makeAutoObservable(this);
}
setEditNote = (note: Note | null) => {
this.editNote = note;
};
setQuery = (query: string) => {
this.query = query;
};
setSaving = (saving: boolean) => {
this.isSaving = saving;
};
setLoading(loading: boolean) {
this.loading = loading;
}
setNotes(notes: Note[]) {
this.notes = notes;
}
setTotal(total: number) {
this.total = total;
}
async fetchNotes() {
const filter: NotesFilter = {
page: this.page,
limit: this.pageSize,
sort: this.sort,
order: this.order,
tags: this.activeTags,
mineOnly: this.ownOnly,
sharedOnly: false,
search: this.query,
};
this.setLoading(true);
try {
const { notes, count } = await notesService.fetchNotes(filter);
this.setNotes(notes);
this.setTotal(count);
return { notes, total: count };
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
}
fetchNoteById = async (noteId: string) => {
this.setLoading(true);
try {
return await notesService.fetchNoteById(noteId);
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
};
setSessionNotes(notes: Note[]) {
this.sessionNotes = notes;
}
appendNote(note: Note) {
this.sessionNotes = [note, ...this.sessionNotes];
}
async fetchSessionNotes(sessionId: string) {
this.setLoading(true);
try {
const notes = await notesService.getNotesBySessionId(sessionId);
notes.forEach((note) => (note.time = note.timestamp));
this.setSessionNotes(notes);
return notes;
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
}
async addNote(sessionId: string, note: WriteNote) {
this.setLoading(true);
try {
const addedNote = await notesService.addNote(sessionId, note);
this.appendNote(addedNote);
return addedNote;
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
}
async deleteNote(noteId: number) {
this.setLoading(true);
try {
const deleted = await notesService.deleteNote(noteId);
return deleted;
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
}
async updateNote(noteId: string, note: WriteNote) {
this.setLoading(true);
try {
const updated = await notesService.updateNote(noteId, note);
return updated;
} catch (e) {
console.error(e);
} finally {
this.setLoading(false);
}
}
getNoteById(noteId: any, notes?: Note[]) {
const notesSource = notes || this.notes;
return notesSource.find((note) => note.noteId === noteId);
}
changePage(page: number) {
this.page = page;
}
toggleTag(tag?: iTag) {
if (!tag) {
this.activeTags = [];
} else {
this.activeTags = [tag];
}
}
toggleShared(ownOnly: boolean) {
this.ownOnly = ownOnly;
}
toggleSort(sort: string) {
const sortOrder = sort.split('-')[1];
// @ts-ignore
this.order = sortOrder;
}
async sendSlackNotification(noteId: string, webhook: string) {
try {
const resp = await notesService.sendSlackNotification(noteId, webhook);
return resp;
} catch (e) {
console.error(e);
}
}
async sendMsTeamsNotification(noteId: string, webhook: string) {
try {
const resp = await notesService.sendMsTeamsNotification(noteId, webhook);
return resp;
} catch (e) {
console.error(e);
}
}
}