127 lines
3.8 KiB
Dart
127 lines
3.8 KiB
Dart
import 'package:get/get.dart';
|
|
import 'package:marco/helpers/services/api_service.dart';
|
|
import 'package:marco/helpers/services/app_logger.dart';
|
|
import 'package:marco/helpers/widgets/my_snackbar.dart';
|
|
import 'package:marco/model/directory/note_list_response_model.dart';
|
|
|
|
class NotesController extends GetxController {
|
|
RxList<NoteModel> notesList = <NoteModel>[].obs;
|
|
RxBool isLoading = false.obs;
|
|
RxnString editingNoteId = RxnString();
|
|
RxString searchQuery = ''.obs;
|
|
|
|
List<NoteModel> get filteredNotesList {
|
|
if (searchQuery.isEmpty) return notesList;
|
|
|
|
final query = searchQuery.value.toLowerCase();
|
|
return notesList.where((note) {
|
|
return note.note.toLowerCase().contains(query) ||
|
|
note.contactName.toLowerCase().contains(query) ||
|
|
note.organizationName.toLowerCase().contains(query) ||
|
|
note.createdBy.firstName.toLowerCase().contains(query);
|
|
}).toList();
|
|
}
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
fetchNotes();
|
|
}
|
|
|
|
Future<void> fetchNotes({int pageSize = 1000, int pageNumber = 1}) async {
|
|
isLoading.value = true;
|
|
logSafe(
|
|
"📤 Fetching directory notes with pageSize=$pageSize & pageNumber=$pageNumber");
|
|
|
|
try {
|
|
final response = await ApiService.getDirectoryNotes(
|
|
pageSize: pageSize, pageNumber: pageNumber);
|
|
logSafe("💡 Directory Notes Response: $response");
|
|
|
|
if (response == null) {
|
|
logSafe("⚠️ Response is null while fetching directory notes");
|
|
notesList.clear();
|
|
} else {
|
|
logSafe("💡 Directory Notes Response: $response");
|
|
notesList.value = NotePaginationData.fromJson(response).data;
|
|
}
|
|
} catch (e, st) {
|
|
logSafe("💥 Error occurred while fetching directory notes",
|
|
error: e, stackTrace: st);
|
|
notesList.clear();
|
|
} finally {
|
|
isLoading.value = false;
|
|
}
|
|
}
|
|
|
|
Future<void> updateNote(NoteModel updatedNote) async {
|
|
try {
|
|
logSafe(
|
|
"Attempting to update note. id: ${updatedNote.id}, contactId: ${updatedNote.contactId}");
|
|
|
|
final oldNote = notesList.firstWhereOrNull((n) => n.id == updatedNote.id);
|
|
|
|
if (oldNote != null && oldNote.note.trim() == updatedNote.note.trim()) {
|
|
logSafe("No changes detected in note. id: ${updatedNote.id}");
|
|
showAppSnackbar(
|
|
title: "No Changes",
|
|
message: "No changes were made to the note.",
|
|
type: SnackbarType.info,
|
|
);
|
|
return;
|
|
}
|
|
|
|
final success = await ApiService.updateContactComment(
|
|
updatedNote.id,
|
|
updatedNote.note,
|
|
updatedNote.contactId,
|
|
);
|
|
|
|
if (success) {
|
|
logSafe("Note updated successfully. id: ${updatedNote.id}");
|
|
final index = notesList.indexWhere((n) => n.id == updatedNote.id);
|
|
if (index != -1) {
|
|
notesList[index] = updatedNote;
|
|
notesList.refresh();
|
|
}
|
|
showAppSnackbar(
|
|
title: "Success",
|
|
message: "Note updated successfully.",
|
|
type: SnackbarType.success,
|
|
);
|
|
} else {
|
|
showAppSnackbar(
|
|
title: "Error",
|
|
message: "Failed to update note.",
|
|
type: SnackbarType.error,
|
|
);
|
|
}
|
|
} catch (e, stackTrace) {
|
|
logSafe("Update note failed: ${e.toString()}");
|
|
logSafe("StackTrace: ${stackTrace.toString()}");
|
|
showAppSnackbar(
|
|
title: "Error",
|
|
message: "Failed to update note.",
|
|
type: SnackbarType.error,
|
|
);
|
|
}
|
|
}
|
|
|
|
void addNote(NoteModel note) {
|
|
notesList.insert(0, note);
|
|
logSafe("Note added to list");
|
|
}
|
|
|
|
void deleteNote(int index) {
|
|
if (index >= 0 && index < notesList.length) {
|
|
notesList.removeAt(index);
|
|
logSafe("Note removed from list at index $index");
|
|
}
|
|
}
|
|
|
|
void clearAllNotes() {
|
|
notesList.clear();
|
|
logSafe("All notes cleared from list");
|
|
}
|
|
}
|